[Dcmlib] gdcm version 0.6: correction

Benoit Regrain benoit.regrain at creatis.insa-lyon.fr
Wed Nov 10 17:22:50 CET 2004


Je viens de m'occuper de ce problème. TestReadWriteReadCompare normalement passe.


Par contre, j'ai toujours des problèmes avec le ShowDicom...
J'ai constaté le phénomène suivant :
 - on récupère la HashTable des tags du header (par référence... tres important) : méthode GetTagHT
 - on essaye de parcourir cette hash table et cela plante.

Si on essaye de passer la hash table par copie (donc sans la référence) alors cela plante directement
à l'appel de cette méthode. J'avais déjà vu cela concernant les objets de la STL avec MSVC6 (toute 
plateforme confondue). Et c'etait dû à des problèmes de link incremental.
Si quelqu'un en sait plus la dessus... je suis preneur de toute information. Merci.


Benoit



  ----- Original Message ----- 
  From: jean-michel.rouet at philips.com 
  To: Mathieu Malaterre 
  Cc: Mailing list gdcm 
  Sent: Wednesday, November 10, 2004 9:59 AM
  Subject: Re: [Dcmlib] gdcm version 0.6: correction



  Bonjour Mathieu, 

  On 09/11/2004 21:09:59 Mathieu Malaterre wrote:
  >
  >Qu'est-ce que tu entends par probleme. Ca passe bien sur toutes les
  >machines (ou presque). Est-ce que c'est un warning avec valgrind ?
  > 

  Mon probleme est le suivant: ctest ne passe pas, j'ai un segfault sur windows 2000 (la mémoire ne peut pas etre "written"), car 

  Le membre Decompressed est alloué avec une longeur DecompressedSize 
  En ensuite le tableau est rempli a l'aide d'un fread sur une longeur PixelDataLength 

  En dans le cas de l'image siemens_gbs_iii-16-acr_nema_1.acr, il se trouve que PixelDataLength > DecompressedSize 
  donc on lit plus de donnée (je ne parle pas de pb de debordement en fin de fichier) que le tableau ne peut en contenir, d'ou un debordement de tableau 

  Je suis le seul a observer ce probleme ? 
  Est-ce un probleme du a CVS pour recuperer les images binaires dans gdcmData ? 
  J'ai vu a ce propos un mail ce matin concernant les -kb -ko pour les fichiers binaires. Il serait peut interessant, pour etre sur que l'on dispose des bonnes images, de commiter egalement le checksum md5 des images binaires. 
  dans mon cas: 

  $ md5sum ./gdcmData/SIEMENS_GBS_III-16-ACR_NEMA_1.acr 
  83c49fddf19b535867567720dfa97b07 *./gdcmData/SIEMENS_GBS_III-16-ACR_NEMA_1.acr 


  Je n'utilise pas valgrind, mais Rational Purify. Lui aussi se plaint: 

  [E] ABW: Array bounds write in memcpy {1 occurrence} 
      Writing 4095 bytes to 0x043a2ff9 (512 bytes at 0x043a3df8 illegal) 
      Address 0x043a2ff9 is 127489 bytes into a 131072 byte block at 0x04383df8 
      Address 0x043a2ff9 points to a C++ new block in heap 0x04190000 
      Thread ID: 0x888 
      Error location 
          memcpy         [MSVCP71D.dll] 
          std::char_traits<char>::copy(char *,char const*,UINT) [iosfwd:448] 
          std::basic_streambuf<char,char_traits<char>::std>::xsgetn(char *,int) [streambuf:302] 
          std::basic_streambuf<char,char_traits<char>::std>::sgetn(char *,int) [streambuf:113] 
          std::basic_istream<char,char_traits<char>::std>::read(char *,int) [istream:657] 
          gdcm::PixelConvert::ReadAndDecompressPixelData(basic_ifstream<char,char_traits<char>::std>::std *) [gdcmpixelconvert.cxx:612] 
                 } 
                 else if ( IsDecompressed ) 
                 { 
           =>        fp->read( (char*)Decompressed, PixelDataLength); 
                    if ( fp->fail() || fp->eof())//Fp->gcount() == 1 
                    { 
                       dbg.Verbose( 0, "PixelConvert::ReadAndDecompressPixelData: " 
          gdcm::File::GetDecompressed(void) [gdcmfile.cxx:515] 
          gdcm::File::GetImageData(void) [gdcmfile.cxx:309] 
          main           [testreadwritereadcompare.cxx:57] 
          mainCRTStartup [crtexe.c:398] 
          _safe_se_handler_count [TestReadWriteReadCompare.exe] 
      Allocation location 
          new(UINT)      [newop.cpp:10] 
          <>=(UINT)      [newaop.cpp:7] 
          gdcm::PixelConvert::AllocateDecompressed(void) [gdcmpixelconvert.cxx:97] 
                   delete [] Decompressed; 
                } 
              
           =>   Decompressed = new uint8_t[ DecompressedSize ]; 
              } 
              
              /** 
          gdcm::PixelConvert::ReadAndDecompressPixelData(basic_ifstream<char,char_traits<char>::std>::std *) [gdcmpixelconvert.cxx:586] 
          gdcm::File::GetDecompressed(void) [gdcmfile.cxx:515] 
          gdcm::File::GetImageData(void) [gdcmfile.cxx:309] 
          main           [testreadwritereadcompare.cxx:57] 
          mainCRTStartup [crtexe.c:398] 
          _safe_se_handler_count [TestReadWriteReadCompare.exe] 





  Le titre de ce mail est peut etre trompeur car je teste la version "courante" de cvs (updaté hier). 


  ./src/gdcmBinEntry.cxx:             $Revision: 1.35 $ 
  ./src/gdcmDebug.cxx:        $Revision: 1.10 $ 
  ./src/gdcmDicomDir.cxx:             $Revision: 1.77 $ 
  ./src/gdcmDicomDirElement.cxx:      $Revision: 1.22 $ 
  ./src/gdcmDicomDirImage.cxx:        $Revision: 1.13 $ 
  ./src/gdcmDicomDirMeta.cxx:         $Revision: 1.14 $ 
  ./src/gdcmDicomDirObject.cxx:       $Revision: 1.7 $ 
  ./src/gdcmDicomDirPatient.cxx:      $Revision: 1.18 $ 
  ./src/gdcmDicomDirSerie.cxx:        $Revision: 1.20 $ 
  ./src/gdcmDicomDirStudy.cxx:        $Revision: 1.17 $ 
  ./src/gdcmDict.cxx:         $Revision: 1.51 $ 
  ./src/gdcmDictEntry.cxx:            $Revision: 1.28 $ 
  ./src/gdcmDictSet.cxx:      $Revision: 1.44 $ 
  ./src/gdcmDirList.cxx:      $Revision: 1.25 $ 
  ./src/gdcmDocEntry.cxx:             $Revision: 1.29 $ 
  ./src/gdcmDocEntrySet.cxx:          $Revision: 1.25 $ 
  ./src/gdcmDocument.cxx:             $Revision: 1.118 $ 
  ./src/gdcmElementSet.cxx:           $Revision: 1.26 $ 
  ./src/gdcmException.cxx:            $Revision: 1.22 $ 
  ./src/gdcmFile.cxx:         $Revision: 1.152 $ 
  ./src/gdcmGlobal.cxx:       $Revision: 1.6 $ 
  ./src/gdcmHeader.cxx:       $Revision: 1.198 $ 
  ./src/gdcmHeaderHelper.cxx:         $Revision: 1.43 $ 
  ./src/gdcmJPEGFragment.cxx:         $Revision: 1.1 $ 
  ./src/gdcmJPEGFragmentsInfo.cxx:            $Revision: 1.4 $ 
  ./src/gdcmJpeg.cxx:         $Revision: 1.28 $ 
  ./src/gdcmJpeg12.cxx:       $Revision: 1.26 $ 
  ./src/gdcmJpeg16.cxx:       $Revision: 1.5 $ 
  ./src/gdcmJpeg2000.cxx:             $Revision: 1.13 $ 
  ./src/gdcmJpeg8.cxx:        $Revision: 1.11 $ 
  ./src/gdcmPixelConvert.cxx:         $Revision: 1.25 $ 
  ./src/gdcmRLEFrame.cxx:             $Revision: 1.1 $ 
  ./src/gdcmRLEFramesInfo.cxx:        $Revision: 1.3 $ 
  ./src/gdcmSQItem.cxx:       $Revision: 1.35 $ 
  ./src/gdcmSeqEntry.cxx:             $Revision: 1.34 $ 
  ./src/gdcmTS.cxx:           $Revision: 1.28 $ 
  ./src/gdcmUtil.cxx:         $Revision: 1.60 $ 
  ./src/gdcmVR.cxx:           $Revision: 1.22 $ 
  ./src/gdcmValEntry.cxx:             $Revision: 1.34 $


------------------------------------------------------------------------------


  _______________________________________________
  Dcmlib mailing list
  Dcmlib at creatis.insa-lyon.fr
  http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/dcmlib/attachments/20041110/8cfd1474/attachment.html>


More information about the Dcmlib mailing list