From f9ef11671c41da4cf973d0d880af1cdfbd127860 Mon Sep 17 00:00:00 2001 From: dirk <dirk@aa41f4f7-0bf4-0310-aa73-e5a19afd5a74> Date: Tue, 16 Dec 2014 23:15:01 +0000 Subject: Fixed throwing of exceptions in psd handling and fix a memory leak git-svn-id: https://subversion.imagemagick.org/subversion/ImageMagick/branches/ImageMagick-6@17308 aa41f4f7-0bf4-0310-aa73-e5a19afd5a74 origin: http://trac.imagemagick.org/changeset/17308 diff --git a/coders/psd.c b/coders/psd.c index f4dec69..8c99dc9 100644 --- a/coders/psd.c +++ b/coders/psd.c @@ -1218,9 +1218,10 @@ static MagickStatusType ReadPSDLayers(Image *image,const ImageInfo *image_info, count=ReadBlob(image,4,(unsigned char *) type); if ((count == 0) || (LocaleNCompare(type,"8BIM",4) != 0)) { - if (DiscardBlobBytes(image,(MagickSizeType) (size-quantum-8)) == MagickFalse) - ThrowFileException(exception,CorruptImageError, - "UnexpectedEndOfFile",image->filename); + if (DiscardBlobBytes(image,(MagickSizeType) (size-quantum-8)) == + MagickFalse) + ThrowBinaryException(CorruptImageError,"UnexpectedEndOfFile", + image->filename); } else { @@ -1228,9 +1229,10 @@ static MagickStatusType ReadPSDLayers(Image *image,const ImageInfo *image_info, if ((count != 0) && (LocaleNCompare(type,"Lr16",4) == 0)) size=GetPSDSize(psd_info,image); else - if (DiscardBlobBytes(image,(MagickSizeType) (size-quantum-12)) == MagickFalse) - ThrowFileException(exception,CorruptImageError, - "UnexpectedEndOfFile",image->filename); + if (DiscardBlobBytes(image,(MagickSizeType) (size-quantum-12)) == + MagickFalse) + ThrowBinaryException(CorruptImageError,"UnexpectedEndOfFile", + image->filename); } } @@ -1261,7 +1263,8 @@ static MagickStatusType ReadPSDLayers(Image *image,const ImageInfo *image_info, " image contains %.20g layers",(double) number_layers); if (number_layers == 0) - return(MagickFalse); + ThrowBinaryException(CorruptImageError,"InvalidNumberOfLayers", + image->filename); layer_info=(LayerInfo *) AcquireQuantumMemory((size_t) number_layers, sizeof(*layer_info)); @@ -1296,7 +1299,7 @@ static MagickStatusType ReadPSDLayers(Image *image,const ImageInfo *image_info, { layer_info=DestroyLayerInfo(layer_info,number_layers); ThrowBinaryException(CorruptImageError,"MaximumChannelsExceeded", - image->filename); + image->filename); } if (image->debug != MagickFalse) (void) LogMagickEvent(CoderEvent,GetMagickModule(), @@ -1375,8 +1378,8 @@ static MagickStatusType ReadPSDLayers(Image *image,const ImageInfo *image_info, if (DiscardBlobBytes(image,(MagickSizeType) (length-16)) == MagickFalse) { layer_info=DestroyLayerInfo(layer_info,number_layers); - ThrowFileException(exception,CorruptImageError, - "UnexpectedEndOfFile",image->filename); + ThrowBinaryException(CorruptImageError,"UnexpectedEndOfFile", + image->filename); } } length=ReadBlobMSBLong(image); @@ -1808,6 +1811,7 @@ static Image *ReadPSDImage(const ImageInfo *image_info, if (image_info->ping != MagickFalse) { (void) CloseBlob(image); + image=DestroyImageList(image); return(image); } /* -- cgit v0.10.2