[vtkusers] Crash in vtkImageMapToColors when upgrading 6.1->6.2

Christian Askeland christian.askeland at gmail.com
Fri Mar 13 08:11:01 EDT 2015


Hi all,

I recently upgraded from vtk 6.1.0 to 6.2.0. Most of my rather large
vtk-based application runs as before, but I get a crash in
vtkImageMapToColors. I am testing on OSX10.8, but my jenkins indicates that
this also happens on Ubuntu 14.04.

The vtkLookupTable that is input to the mapper has a custom
NumberOfTableValues, and a little digging has shown that setting this value
> 256 (the default) causes the crash.

Here is a distilled version of the problem:

typedef vtkSmartPointer<vtkImageData> vtkImageDataPtr;
typedef vtkSmartPointer<vtkLookupTable> vtkLookupTablePtr;
typedef vtkSmartPointer<vtkImageMapToColors> vtkImageMapToColorsPtr;

// create simple image data
vtkImageDataPtr image = vtkImageDataPtr::New();
image->SetExtent(0, 2, 0, 2, 0, 2); // 3x3x3 image
image->AllocateScalars(VTK_UNSIGNED_CHAR, 1);

// create simple lut data with a custom table size
int numberOfTableValues = 257; // anything above 256 (default) fails
vtkLookupTablePtr lut = vtkLookupTablePtr::New();
lut->SetNumberOfTableValues(numberOfTableValues);
lut->SetTableRange(0, numberOfTableValues - 1);
lut->Build();

// send through a vtkImageMapToColors
vtkImageMapToColorsPtr mapper = vtkImageMapToColorsPtr::New();
mapper->SetOutputFormatToRGBA();
mapper->SetInputData(image);
mapper->SetLookupTable(lut);
mapper->Update(); // crashes deep inside
vtkLookupTable::MapScalarsThroughTable2

The call stack in the crashing thread is

abort
free
vtkDataArrayTemplate<unsigned char>::ResizeAndExtend(long long)
vtkDataArrayTemplate<unsigned char>::Resize(long long)
void (anonymous namespace)::vtkLookupTableMapData<unsigned char>(...)
vtkLookupTable::MapScalarsThroughTable2(void*, unsigned char*, int, int,
int, int)
vtkImageMapToColors::ThreadedRequestData(...)
vtkThreadedImageAlgorithmThreadedExecute(...)

Even more digging shows that calling vtkLookupTable::MapScalarsThroughTable
explicitly after creating the lut removes the crash:

unsigned char input = 0;
lut->MapScalarsThroughTable2(&input, &input, VTK_UNSIGNED_CHAR, 1, 1, 1);

I have not started digging into the vtk code itself yet.

I would appreciate if anyone have an idea of what is wrong here. I can file
a bug report if noone have a solution.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150313/0f6fbd70/attachment.html>


More information about the vtkusers mailing list