[Insight-users] bug in tiff reader with ReleaseDataFlagOn() ? (ITK 3.14.0)

Ola Kristoffer Øye ola.kristoffer.oye at cmr.no
Mon Jun 8 13:24:25 EDT 2009


Hi,
Thanks for your answer Bill. 
> 
> In your case, the downstream filter (writer) will release the bulk
> data after the Update(). So a reader->GetOutput() should be invalid,
> but I think the reader->Update() should regenerate the the reader's
> output (and not crash). Looks like a bug to me.
> 
> Does it also fail if you do a reader->UpdateLargestPossibleRegion() ?
> 

Yes, it also fails then. What you describe is also my understanding of 
how it is supposed to work, and it seems to work that way with other 
kinds of imgs (jpg/png).

It seems the problem occurs in TIFFImageIO::Read(...): 
m_InternalImage->m_Image is NULL, probably because of the 
ReleaseDataFlagOn(). Then, TIFFReadRGBAImage(...) is called with 
m_InternalImage->m_Image as argument, and this leads to a crash when 
m_Image is accessed in TIFFRGBAImageOK(...), on the line:
if (!tif->tif_decodestatus) {

Also, my TIFF is as you can see from my example code unsigned short, not 
RGBA, so why these methods should be called I dont know...

Thanks in advance,
Regards,
Ola


> Others more knowledgeable about the pipeline may comment or correct my
> interpretation.
> 
> Bill
> 
> On Mon, Jun 8, 2009 at 8:50 AM, Ola Kristoffer
> Øye<ola.kristoffer.oye at cmr.no> wrote:
> > Hi,
> > I get a crash (access violation) when setting ReleaseDataFlagOn() on 
a
> > tiff reader in ITK, executing the pipeline, and then calling update 
on
> > the reader.
> > It could be that I am using the pipeline in some unintended way,
> > otherwise I believe it is a bug.
> >
> > Platform: Win XP 32, VS 2005, ITK 3.14.0.
> >
> > Below is a basic example that reproduce the problem: a pipeline that
> > reads and writes a tiff image, where the reader has 
ReleaseDataFlagOn():
> >
> > #include "itkImage.h"
> > #include "itkImageFileReader.h"
> > #include "itkImageFileWriter.h"
> >
> > void main(int argc, char* argv)
> > {
> >  typedef unsigned short PixelType;
> >  typedef itk::Image<PixelType, 2> ImageType;
> >  typedef itk::ImageFileReader<ImageType> Reader;
> >  typedef itk::ImageFileWriter<ImageType> Writer;
> >
> >  Reader::Pointer reader = Reader::New();
> >  Writer::Pointer writer = Writer::New();
> >
> >  reader->ReleaseDataFlagOn();  //this seems to be the problem
> >  writer->SetInput(reader->GetOutput());
> >
> >  reader->SetFileName("C:\\test\\input.tif");
> >  writer->SetFileName("C:\\test\\output.tif");
> >
> >  writer->Write();
> >
> >  reader->Update();  //this triggers a crash
> > }
> >
> >
> > The crash occurs somewhere inside the tiff reader (stack trace 
below).
> > The file is successfully written.
> > Replacing with writer->Update() produces the same crash.
> >
> > Without ReleaseDataFlagOn(), it works.
> > It also works when using a jpg image instead of a tif, even with
> > ReleaseDataFlagOn().
> >
> > I found a similar report from 2004:
> > http://www.itk.org/pipermail/insight-users/2004-January/006468.html
> >
> > Stack trace:
> >>       GelCorrelation.exe!itk_TIFFRGBAImageOK(tiff * tif=0x00000000,
> char
> > * emsg=0x0013f144)  Line 83 + 0x3 bytes C
> >        GelCorrelation.exe!itk_TIFFReadRGBAImageOriented(tiff *
> > tif=0x00000000, unsigned long rwidth=0, unsigned long rheight=0,
> > unsigned long * raster=0x028dc7d0, int orientation=4, int stop=1) 
 Line
> > 468 + 0x10 bytes        C
> >        GelCorrelation.exe!itk_TIFFReadRGBAImage(tiff * 
tif=0x00000000,
> > unsigned long rwidth=0, unsigned long rheight=0, unsigned long *
> > raster=0x028dc7d0, int stop=1)  Line 490 + 0x1b bytes   C
> >        GelCorrelation.exe!itk::TIFFImageIO::Read(void *
> > buffer=0x02af0040)  Line 1305 + 0x28 bytes      C++
> >        GelCorrelation.exe!itk::ImageFileReader<itk::Image<unsigned
> > short,2>,itk::DefaultConvertPixelTraits<unsigned short>
> >>::GenerateData()  Line 401 + 0x33 bytes        C++
> >
> > 
GelCorrelation.exe!itk::ProcessObject::UpdateOutputData(itk::DataObject
> > * __formal=0x028d7f88)  Line 987 + 0x12 bytes   C++
> >        GelCorrelation.exe!itk::DataObject::UpdateOutputData()  Line 
420
> +
> > 0x21 bytes      C++
> >        GelCorrelation.exe!itk::DataObject::Update()  Line 344 + 0xf
> bytes
> > C++
> >        GelCorrelation.exe!itk::ProcessObject::Update()  Line 615 + 
0x1c
> > bytes   C++
> >        GelCorrelation.exe!main(int argc=1, char * argv=0x027e3cb0) 
 Line
> > 25 + 0x23 bytes C++
> >        GelCorrelation.exe!__tmainCRTStartup()  Line 597 + 0x19 bytes
> > C
> >        GelCorrelation.exe!mainCRTStartup()  Line 414   C
> >        kernel32.dll!7c817077()
> >        [Frames below may be incorrect and/or missing, no symbols 
loaded
> > for kernel32.dll]
> >
> >
> >
> > ----------------------------------------
> > Ola Kristoffer Øye
> > CMR Computing
> > Fantoftvegen 38, N-5072 Bergen, Norway
> > Phone: +47 55 57 40 04 / +47 41 44 63 53
> > Fax:   +47 55 57 40 41
> >
> >
> > _____________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.itk.org/mailman/listinfo/insight-users
> >




More information about the Insight-users mailing list