[Insight-developers] Re: crash in gdcm library
Mathieu Malaterre
mathieu.malaterre at kitware.com
Thu Apr 6 13:45:45 EDT 2006
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.
>
>
More information about the Insight-developers
mailing list