From: dirk Date: Sat, 28 Dec 2013 22:55:19 +0000 (+0000) Subject: Fix cleanup of layer info. X-Git-Tag: 7.0.1-0~3023 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bd8bd8572e272ce0bc730bfa0296b8f048ea2da1;p=imagemagick Fix cleanup of layer info. --- diff --git a/coders/psd.c b/coders/psd.c index 845876341..5c07c3db8 100644 --- a/coders/psd.c +++ b/coders/psd.c @@ -434,6 +434,21 @@ static ssize_t DecodePSDPixels(const size_t number_compact_pixels, return(i); } +static inline LayerInfo *DestroyLayerInfo(LayerInfo *layer_info, + const ssize_t number_layers) +{ + ssize_t + i; + + for (i=0; istorage_class == PseudoClass) @@ -1250,7 +1265,7 @@ static MagickStatusType ReadPSDLayers(Image *image,PSDInfo *psd_info, layer_info[i].channels=ReadBlobMSBShort(image); if (layer_info[i].channels > MaxPSDChannels) { - layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info); + layer_info=DestroyLayerInfo(layer_info,number_layers); ThrowBinaryException(CorruptImageError,"MaximumChannelsExceeded", image->filename); } @@ -1277,7 +1292,7 @@ static MagickStatusType ReadPSDLayers(Image *image,PSDInfo *psd_info, if (image->debug != MagickFalse) (void) LogMagickEvent(CoderEvent,GetMagickModule(), " layer type was %.4s instead of 8BIM", type); - layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info); + layer_info=DestroyLayerInfo(layer_info,number_layers); ThrowBinaryException(CorruptImageError,"ImproperImageHeader", image->filename); } @@ -1330,7 +1345,7 @@ static MagickStatusType ReadPSDLayers(Image *image,PSDInfo *psd_info, */ if (DiscardBlobBytes(image,length-16) == MagickFalse) { - layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info); + layer_info=DestroyLayerInfo(layer_info,number_layers); ThrowFileException(exception,CorruptImageError, "UnexpectedEndOfFile",image->filename); } @@ -1379,7 +1394,7 @@ static MagickStatusType ReadPSDLayers(Image *image,PSDInfo *psd_info, ((MagickOffsetType) (size-combined_length))); if (DiscardBlobBytes(image,size-combined_length) == MagickFalse) { - layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info); + layer_info=DestroyLayerInfo(layer_info,number_layers); ThrowBinaryException(CorruptImageError, "UnexpectedEndOfFile",image->filename); } @@ -1420,9 +1435,7 @@ static MagickStatusType ReadPSDLayers(Image *image,PSDInfo *psd_info, layer_info[i].page.height,MagickFalse,exception); if (layer_info[i].image == (Image *) NULL) { - for (j=0; j < i; j++) - layer_info[j].image=DestroyImage(layer_info[j].image); - layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info); + layer_info=DestroyLayerInfo(layer_info,number_layers); if (image->debug != MagickFalse) (void) LogMagickEvent(CoderEvent,GetMagickModule(), " allocation of image for layer %.20g failed",(double) i); @@ -1440,7 +1453,7 @@ static MagickStatusType ReadPSDLayers(Image *image,PSDInfo *psd_info, if (DiscardBlobBytes(image,layer_info[i].channel_info[j].size) == MagickFalse) { - layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info); + layer_info=DestroyLayerInfo(layer_info,number_layers); ThrowBinaryException(CorruptImageError, "UnexpectedEndOfFile",image->filename); }