From 44675e8e48977bbeb1cafade861db2d777a5c7ae Mon Sep 17 00:00:00 2001 From: cristy <cristy@aa41f4f7-0bf4-0310-aa73-e5a19afd5a74> Date: Sun, 14 Dec 2014 15:28:26 +0000 Subject: Avoid a memory leak in quantum management Note that upstream magick/colormap-private.h patch is buggy and already applied in the patch queue. git-svn-id: https://subversion.imagemagick.org/subversion/ImageMagick/branches/ImageMagick-6@17207 aa41f4f7-0bf4-0310-aa73-e5a19afd5a74 origin: http://trac.imagemagick.org/changeset/17207 and http://trac.imagemagick.org/changeset/17228 diff --git a/magick/quantum.c b/magick/quantum.c index b94cd45..ff993bd 100644 --- a/magick/quantum.c +++ b/magick/quantum.c @@ -46,6 +46,7 @@ #include "magick/exception.h" #include "magick/exception-private.h" #include "magick/cache.h" +#include "magick/cache-private.h" #include "magick/constitute.h" #include "magick/delegate.h" #include "magick/geometry.h" @@ -112,6 +113,8 @@ MagickExport QuantumInfo *AcquireQuantumInfo(const ImageInfo *image_info, QuantumInfo *quantum_info; + if (SyncImagePixelCache(image,&image->exception) == MagickFalse) + return(MagickFalse); quantum_info=(QuantumInfo *) AcquireMagickMemory(sizeof(*quantum_info)); if (quantum_info == (QuantumInfo *) NULL) ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); @@ -137,7 +140,7 @@ MagickExport QuantumInfo *AcquireQuantumInfo(const ImageInfo *image_info, % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% AcquireQuantumPixels() allocates the unsigned char structure. +% AcquireQuantumPixels() allocates the pixel staging area. % % The format of the AcquireQuantumPixels method is: % @@ -172,7 +175,12 @@ static MagickBooleanType AcquireQuantumPixels(QuantumInfo *quantum_info, quantum_info->pixels[i]=(unsigned char *) AcquireQuantumMemory(extent+1, sizeof(**quantum_info->pixels)); if (quantum_info->pixels[i] == (unsigned char *) NULL) - return(MagickFalse); + { + while (--i >= 0) + quantum_info->pixels[i]=(unsigned char *) RelinquishMagickMemory( + quantum_info->pixels[i]); + return(MagickFalse); + } (void) ResetMagickMemory(quantum_info->pixels[i],0,(extent+1)* sizeof(**quantum_info->pixels)); quantum_info->pixels[i][extent]=QuantumSignature; -- cgit v0.10.2