[Dcmlib] gdcm version 0.6: correction

jean-michel.rouet at philips.com jean-michel.rouet at philips.com
Tue Nov 9 13:52:17 CET 2004


J'ai un probleme avec la derniere version cvs de GDCM.
Apres recompil, les tests plantent (entre autre) dans 
TestReadWriteReadCompare sur l'image siemens_gbs_iii-16-acr_nema_1.acr
Apres une courte séance de debug et de purify, il semble qu'il y a un 
probleme dans 


void PixelConvert::AllocateDecompressed()
{
  if ( Decompressed ) {
     delete [] Decompressed;
  }
  Decompressed = new uint8_t[ DecompressedSize ];
}

qui aloue DecompressedSize (ici 131072 octets = 256*256*1*(16/2)*1)
alors que 
bool PixelConvert::ReadAndDecompressPixelData( std::ifstream* fp )
{
   ComputeDecompressedAndRGBSizes();
   AllocateDecompressed();
 
 ...<skip>..

   //////////////////////////////////////////////////
   //// Second stage: read from disk dans decompress.
   if ( BitsAllocated == 12 )
   {
      ReadAndDecompress12BitsTo16Bits( fp);
   }
   else if ( IsDecompressed )
   {
      fp->read( (char*)Decompressed, PixelDataLength);

 ...<skip>...
}

le fread ici utilise PixelDataLength (ici 132096 octets, valeur lue dans 
le header dicom si je comprends bien).

d'ou des debordements de buffer catastrophiques pour la suite... 

Est-ce que DecompressedSize ne pourrait pas etre fixé au minimum a 
PixelDataLength ?

JM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/dcmlib/attachments/20041109/b6fe2927/attachment.html>


More information about the Dcmlib mailing list