[vtkusers] Unconnected filter(s) causing seg faults
N Smethurst
nick.smethurst at free.fr
Thu Oct 16 08:42:37 EDT 2003
Hi all
I've been writing a program that includes a drag & drop front end to the VTK
libraries for a while now, and I have noted there is a sometimes a problem
with unconnected filters.
For example, in the base class PolyDataToPolyDataFilter, the GetInput()
method used by derived classes looks like this:
vtkPolyData *vtkPolyDataToPolyDataFilter::GetInput()
{
if (this->NumberOfInputs < 1)
{
return NULL;
}
return (vtkPolyData *)(this->Inputs[0]);
}
which is good and precautionary. A null pointer is returned if there is no
input. However, one or more derived classes seem do things like this in
their execute methods:
void vtkTubeFilter::Execute()
{
vtkPolyData *input = this->GetInput();
vtkPolyData *output = this->GetOutput();
vtkPointData *pd=input->GetPointData(); // BBZZZZZZZ!
vtkPointData *outPD=output->GetPointData();
vtkCellData *cd=input->GetCellData();
...
i.e. there is no provision for making sure the return value provided by the
GetInput() method is valid before it is used. Hence, any filter with no
input will cause a seg fault. Other derived classes have seg fault
prevention mechanisms:
void vtkTriangleFilter::Execute()
{
vtkPolyData *input = this->GetInput();
if (!input)
{
return;
}
Can these checks be included in all execute methods? I am happy to help by
submit the simple patches implementing them. I have not checked how many
need doing yet.. possibly there are very few.
Nick
More information about the vtkusers
mailing list