[Insight-developers] Re: crash in gdcm library

Mathieu Malaterre mathieu.malaterre at kitware.com
Thu Apr 6 13:48:31 EDT 2006


Ok disregards this email. The test actually add some restrictions.

Using vtkgdcmViewer from gdcm works, so I must be doing something wrong 
in ITK.


Mathieu

Mathieu Malaterre wrote:
> I am currently swamp right now. Could you make sure your series is 
> actually consistent I am getting:
> 
> ./bin/itkGDCMSeriesReadImageWrite 3DSPGR /tmp/kent.vtk /tmp/kent
> ...
> WARNING: In 
> /home/mathieu/Dashboards/MyTests/Insight/Code/IO/itkGDCMSeriesFileNames.cxx, 
> line 97
> GDCMSeriesFileNames (0x5185370): No Series can be found, make sure you 
> restiction are not too strong
> 
> 0
> Exception thrown while writing the image
> 
> itk::ExceptionObject (0x54b3030)
> Location: "void 
> itk::ImageSeriesReader<TOutputImage>::GenerateOutputInformation() [with 
> TOutputImage = itk::Image<short unsigned int, 3u>]"
> File: 
> /home/mathieu/Dashboards/MyTests/Insight/Code/IO/itkImageSeriesReader.txx
> Line: 196
> Description: itk::ERROR: ImageSeriesReader(0x54b2b88): At least two 
> filenames are required.
> 
> 
> Thanks
> Mathieu
> 
> Kent Williams wrote:
> 
>> Here is the dataset:
>> http://www.cornwarning.com/xfer/3DSPGR.tar.gz
>>
>> If I use the ConvertBetweenFileFormats command to convert the DICOM 
>> directory, I get these errors. This with CVS Insight and CVS 
>> InsightApplications, updated today.
>>
>> gauss 129% ConvertBetweenFileFormats 3DSPGR CBFFImage0.hdr
>> Not a JPEG file: starts with 0xff 0xc4
>> Error: In 
>> /scratch/kent/brains2/iplFreeware/unpackdir/Insight/Utilities/gdcm/src/gdcmJpeg.cxx, 
>> line 276, function bool 
>> gdcm::JPEGFragment::ReadJPEGFile16(std::ifstream*, void*, int&)
>> Serious Problem !
>>
>>
>> *** glibc detected *** free(): invalid pointer: 0xb703e008 ***
>> Abort
>>
>> It looks as though its getting into JPEG decoding by error, after 
>> which it scrambles all over memory. Here's the valgrind output:
>>
>> gauss 119% valgrind ConvertBetweenFileFormats 3DSPGR CBFFImage0.hdr
>> ==1124== Memcheck, a memory error detector.
>> ==1124== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
>> ==1124== Using LibVEX rev 1471, a library for dynamic binary translation.
>> ==1124== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
>> ==1124== Using valgrind-3.1.0, a dynamic binary instrumentation 
>> framework.
>> ==1124== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
>> ==1124== For more details, rerun with: -v
>> ==1124==
>> Not a JPEG file: starts with 0xff 0xc4
>> Error: In 
>> /scratch/kent/brains2/iplFreeware/unpackdir/Insight/Utilities/gdcm/src/gdcmJpeg.cxx, 
>> line 276, function bool 
>> gdcm::JPEGFragment::ReadJPEGFile16(std::ifstream*, void*, int&)
>> Serious Problem !
>>
>>
>> ==1124== Invalid write of size 1
>> ==1124==    at 0x88A7614: 
>> gdcm::JPEGFragment::ReadJPEGFile16(std::basic_ifstream<char, 
>> std::char_traits<char> >*, void*, int&) (gdcmJpeg.cxx:353)
>> ==1124==    by 0x88A45DE: 
>> gdcm::JPEGFragment::DecompressJPEGFramesFromFile(std::basic_ifstream<char, 
>> std::char_traits<char> >*, unsigned char*, int, int&) 
>> (gdcmJPEGFragment.cxx:76)
>> ==1124==    by 0x88A4C2A: 
>> gdcm::JPEGFragmentsInfo::DecompressFromFile(std::basic_ifstream<char, 
>> std::char_traits<char> >*, unsigned char*, int, int, int) 
>> (gdcmJPEGFragmentsInfo.cxx:60)
>> ==1124==    by 0x88AAED7: 
>> gdcm::PixelReadConvert::ReadAndDecompressJPEGFile(std::basic_ifstream<char, 
>> std::char_traits<char> >*) (gdcmPixelReadConvert.cxx:532)
>> ==1124==    by 0x88AD444: 
>> gdcm::PixelReadConvert::ReadAndDecompressPixelData(std::basic_ifstream<char, 
>> std::char_traits<char> >*) (gdcmPixelReadConvert.cxx:288)
>> ==1124==    by 0x8894524: gdcm::FileHelper::GetRaw() 
>> (gdcmFileHelper.cxx:1730)
>> ==1124==    by 0x8894776: gdcm::FileHelper::GetImageData() 
>> (gdcmFileHelper.cxx:393)
>> ==1124==    by 0x87F4D86: itk::GDCMImageIO::Read(void*) 
>> (itkGDCMImageIO.cxx:244)
>> ==1124==    by 0x837474A: itk::ImageFileReader<itk::Image<short, 3>, 
>> itk::DefaultConvertPixelTraits<short> >::GenerateData() 
>> (itkImageFileReader.txx:351)
>> ==1124==    by 0x87E8739: 
>> itk::ProcessObject::UpdateOutputData(itk::DataObject*) 
>> (itkProcessObject.cxx:991)
>> ==1124==    by 0x87DB440: itk::DataObject::UpdateOutputData() 
>> (itkDataObject.cxx:420)
>> ==1124==    by 0x87DB1C1: itk::DataObject::Update() 
>> (itkDataObject.cxx:344)
>> ==1124==  Address 0x50C4590 is 0 bytes after a block of size 131,072 
>> alloc'd
>> ==1124==    at 0x4004D29: operator new[](unsigned) 
>> (vg_replace_malloc.c:197)
>> ==1124==    by 0x88AA6AF: gdcm::PixelReadConvert::AllocateRaw() 
>> (gdcmPixelReadConvert.cxx:1302)
>> ==1124==    by 0x88ACD36: 
>> gdcm::PixelReadConvert::ReadAndDecompressPixelData(std::basic_ifstream<char, 
>> std::char_traits<char> >*) (gdcmPixelReadConvert.cxx:234)
>> ==1124==    by 0x8894524: gdcm::FileHelper::GetRaw() 
>> (gdcmFileHelper.cxx:1730)
>> ==1124==    by 0x8894776: gdcm::FileHelper::GetImageData() 
>> (gdcmFileHelper.cxx:393)
>> ==1124==    by 0x87F4D86: itk::GDCMImageIO::Read(void*) 
>> (itkGDCMImageIO.cxx:244)
>> ==1124==    by 0x837474A: itk::ImageFileReader<itk::Image<short, 3>, 
>> itk::DefaultConvertPixelTraits<short> >::GenerateData() 
>> (itkImageFileReader.txx:351)
>> ==1124==    by 0x87E8739: 
>> itk::ProcessObject::UpdateOutputData(itk::DataObject*) 
>> (itkProcessObject.cxx:991)
>> ==1124==    by 0x87DB440: itk::DataObject::UpdateOutputData() 
>> (itkDataObject.cxx:420)
>> ==1124==    by 0x87DB1C1: itk::DataObject::Update() 
>> (itkDataObject.cxx:344)
>> ==1124==    by 0x87E905B: 
>> itk::ProcessObject::UpdateLargestPossibleRegion() 
>> (itkProcessObject.cxx:1132)
>> ==1124==    by 0x842DDE5: itk::ImageSeriesReader<itk::Image<short, 3> 
>>  >::GenerateData() (itkImageSeriesReader.txx:260)
>> ==1124==
>> ==1124== More than 100000 total errors detected.  I'm not reporting 
>> any more.
>> ==1124== Final error counts will be inaccurate.  Go fix your program!
>> ==1124== Rerun with --error-limit=no to disable this cutoff.  Note
>> ==1124== that errors may occur in your program without prior warning from
>> ==1124== Valgrind, because errors are no longer being displayed.
>> ==1124==
>> --1124-- INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - 
>> exiting
>> --1124-- si_code=1;  Faulting address: 0x10006;  sp: 0x63A66DCC
>>
>> valgrind: the 'impossible' happened:
>>    Killed by fatal signal
>> ==1124==    at 0xB001AAC0: swizzle (m_mallocfree.c:306)
>> ==1124==    by 0xB001BCCB: unlinkBlock (m_mallocfree.c:928)
>> ==1124==    by 0xB001C7AC: vgPlain_arena_free (m_mallocfree.c:1110)
>> ==1124==    by 0xB0035387: vgPlain_cli_free (replacemalloc_core.c:108)
>> ==1124==    by 0xB00016F7: die_and_free_mem (mac_malloc_wrappers.c:120)
>> ==1124==    by 0xB0037092: do_client_request (scheduler.c:987)
>> ==1124==    by 0xB0036A3A: vgPlain_scheduler (scheduler.c:721)
>> ==1124==    by 0xB004B173: thread_wrapper (syswrap-linux.c:86)
>> ==1124==    by 0xB004B2A6: run_a_thread_NORETURN (syswrap-linux.c:119)
>>
>> sched status:
>>   running_tid=1
>>
>> Thread 1: status = VgTs_Runnable
>> ==1124==    at 0x40050A8: free (vg_replace_malloc.c:235)
>> ==1124==    by 0x890ACAF: itk_jpeg16_jpeg_free_small (jmemnobs.c:45)
>> ==1124==    by 0x89026A4: free_pool (jmemmgr.c:1042)
>> ==1124==    by 0x890111C: itk_jpeg16_jpeg_abort (jcomapi.c:41)
>> ==1124==    by 0x88F43CA: itk_jpeg16_jpeg_finish_decompress 
>> (jdapimin.c:399)
>> ==1124==    by 0x88A7641: 
>> gdcm::JPEGFragment::ReadJPEGFile16(std::basic_ifstream<char, 
>> std::char_traits<char> >*, void*, int&) (gdcmJpeg.cxx:359)
>> ==1124==    by 0x88A45DE: 
>> gdcm::JPEGFragment::DecompressJPEGFramesFromFile(std::basic_ifstream<char, 
>> std::char_traits<char> >*, unsigned char*, int, int&) 
>> (gdcmJPEGFragment.cxx:76)
>> ==1124==    by 0x88A4C2A: 
>> gdcm::JPEGFragmentsInfo::DecompressFromFile(std::basic_ifstream<char, 
>> std::char_traits<char> >*, unsigned char*, int, int, int) 
>> (gdcmJPEGFragmentsInfo.cxx:60)
>> ==1124==    by 0x88AAED7: 
>> gdcm::PixelReadConvert::ReadAndDecompressJPEGFile(std::basic_ifstream<char, 
>> std::char_traits<char> >*) (gdcmPixelReadConvert.cxx:532)
>> ==1124==    by 0x88AD444: 
>> gdcm::PixelReadConvert::ReadAndDecompressPixelData(std::basic_ifstream<char, 
>> std::char_traits<char> >*) (gdcmPixelReadConvert.cxx:288)
>> ==1124==    by 0x8894524: gdcm::FileHelper::GetRaw() 
>> (gdcmFileHelper.cxx:1730)
>> ==1124==    by 0x8894776: gdcm::FileHelper::GetImageData() 
>> (gdcmFileHelper.cxx:393)
>> ==1124==    by 0x87F4D86: itk::GDCMImageIO::Read(void*) 
>> (itkGDCMImageIO.cxx:244)
>> ==1124==    by 0x837474A: itk::ImageFileReader<itk::Image<short, 3>, 
>> itk::DefaultConvertPixelTraits<short> >::GenerateData() 
>> (itkImageFileReader.txx:351)
>> ==1124==    by 0x87E8739: 
>> itk::ProcessObject::UpdateOutputData(itk::DataObject*) 
>> (itkProcessObject.cxx:991)
>> ==1124==    by 0x87DB440: itk::DataObject::UpdateOutputData() 
>> (itkDataObject.cxx:420)
>> ==1124==    by 0x87DB1C1: itk::DataObject::Update() 
>> (itkDataObject.cxx:344)
>> ==1124==    by 0x87E905B: 
>> itk::ProcessObject::UpdateLargestPossibleRegion() 
>> (itkProcessObject.cxx:1132)
>> ==1124==    by 0x842DDE5: itk::ImageSeriesReader<itk::Image<short, 3> 
>>  >::GenerateData() (itkImageSeriesReader.txx:260)
>> ==1124==    by 0x87E8739: 
>> itk::ProcessObject::UpdateOutputData(itk::DataObject*) 
>> (itkProcessObject.cxx:991)
>> ==1124==    by 0x87DB440: itk::DataObject::UpdateOutputData() 
>> (itkDataObject.cxx:420)
>> ==1124==    by 0x87E83D4: 
>> itk::ProcessObject::UpdateOutputData(itk::DataObject*) 
>> (itkProcessObject.cxx:940)
>> ==1124==    by 0x87DB440: itk::DataObject::UpdateOutputData() 
>> (itkDataObject.cxx:420)
>> ==1124==    by 0x87DB1C1: itk::DataObject::Update() 
>> (itkDataObject.cxx:344)
>> ==1124==    by 0x87E905B: 
>> itk::ProcessObject::UpdateLargestPossibleRegion() 
>> (itkProcessObject.cxx:1132)
>> ==1124==    by 0x83B28CC: itk::ImageFileWriter<itk::Image<short, 3> 
>>  >::Write() (itkImageFileWriter.txx:182)
>> ==1124==    by 0x837B1C7: itk::ImageFileWriter<itk::Image<short, 3> 
>>  >::Update() (itkImageFileWriter.h:144)
>> ==1124==    by 0x83C3F0E: void 
>> ReadDicomSeriesCastWriteImage<itk::Image<short, 3>, itk::Image<short, 
>> 3>  >(std::string, std::string) (castconverthelpers.h:141)
>> ==1124==    by 0x8377925: DicomFileConverterScalar(std::string const&, 
>> std::string const&, std::string const&, std::string const&, int) 
>> (castconvertDicomScalar.cxx:67)
>> ==1124==    by 0x835D307: main (castconvert.cxx:304)
>>
>>
>> Note: see also the FAQ.txt in the source distribution.
>> It contains workarounds to several common problems.
>>
>> If that doesn't help, please report this bug to: www.valgrind.org
>>
>> In the bug report, send all the above text, the valgrind
>> version, and what Linux distro you are using.  Thanks.
>>
>>
> 
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers
> 



More information about the Insight-developers mailing list