[vtkusers] "Annoyance" in vtkDataReader using .NET2005
Mathieu Malaterre
mathieu.malaterre at kitware.com
Mon Apr 24 12:38:59 EDT 2006
Bernd,
Thanks for the report. Could you please open a bug report for that:
http://vtk.org/Bug
Thanks
Mathieu
Hentschel, Bernd wrote:
> Dear VTK users,
>
> I just discovered something I would call a major annoyance in the
> vtkDataReader because it isn't exactly a bug. We use vtkReader/Writer
> classes to (de)serialize vtk data via the WriteToOutputString feature.
> We recently switched our development to the new VC8 (aka .NET 2005)
> compilers and that's when the following issue with vtkDataReader arose:
> Trying to read an "empty" VTK-File (either file or string input), i.e.
> the representation of an empty vtkPolyData object (no points, no cells,
> just the header), our app crashed inside the read operation. The reason
> for this seems to be the "new" STL-implementation shipped with .NET2005.
> A lot of calls there are using assertions to ensure proper input
> parameters. In particular istream::read(*readbuffer,numbytes) now
> asserts that the input read pointer be != NULL. This caused the crash
> mentioned above, since eventually a NULL pointer is passed to read (in
> template <class T> int vtkReadBinaryData(istream *IS, T *data, int
> numTuples, int numComp)).
> In the "old" STL implementation this was no problem. A NULL-pointer was
> only passed to calls which didn't read anything from the istream either,
> so in effect nothing was read. We fixed this issue by introducing a
> sanity check into vtkReadBinaryData in vtkDataReader.cxx, resulting in
> the following code:
> <<<<<
> template <class T>
> int vtkReadBinaryData(istream *IS, T *data, int numTuples, int numComp)
> {
> //SANITY CHECK TO PREVENT READING NONSENSE
> if(!data || numComp*numTuples == 0)
> {
> vtkGenericWarningMacro(<<"Invalid input data for binary read
> operation!");
> return 0;
> }
>
> char line[256];
> // suck up newline
> IS->getline(line,256);
> IS->read((char *)data, sizeof(T)*numComp*numTuples);
> if (IS->eof())
> {
> vtkGenericWarningMacro(<<"Error reading binary data!");
> return 0;
> }
> return 1;
> }
>
> We had this problem using 4.2.6 but looking at the source code and the
> cvs logs it doesn't seem to be fixed in vtk5 yet. I don't know for sure
> if the above fix is appropriate but it suffices our needs. So I thought
> I might share this one since it was a bit of a headache to figure out.
>
> Regards,
> Bernd
>
More information about the vtkusers
mailing list