From: root <356986351@qq.com> Date: Thu, 14 Sep 2017 13:44:34 +0000 (+0000) Subject: fix multiple memory leak in ReadYUVImage X-Git-Tag: 7.0.7-3~34 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ef8f40689ac452398026c07da41656a7c87e4683;p=imagemagick fix multiple memory leak in ReadYUVImage --- diff --git a/coders/yuv.c b/coders/yuv.c index a203ea768..6eeac3d55 100644 --- a/coders/yuv.c +++ b/coders/yuv.c @@ -211,7 +211,10 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) horizontal_factor,(image->rows+vertical_factor-1)/vertical_factor, MagickTrue,exception); if (chroma_image == (Image *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + { + scanline=(unsigned char *) RelinquishMagickMemory(scanline); + ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + } /* Convert raster image to pixel packets. */ @@ -227,6 +230,7 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) { + scanline=(unsigned char *) RelinquishMagickMemory(scanline); image=DestroyImageList(image); return((Image *) NULL); } @@ -353,6 +357,7 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) { + scanline=(unsigned char *) RelinquishMagickMemory(scanline); image=DestroyImageList(image); return((Image *) NULL); } @@ -399,6 +404,7 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); if (status == MagickFalse) { + scanline=(unsigned char *) RelinquishMagickMemory(scanline); image=DestroyImageList(image); return((Image *) NULL); } @@ -442,7 +448,10 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) TriangleFilter,exception); chroma_image=DestroyImage(chroma_image); if (resize_image == (Image *) NULL) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + { + scanline=(unsigned char *) RelinquishMagickMemory(scanline); + ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + } for (y=0; y < (ssize_t) image->rows; y++) { q=GetAuthenticPixels(image,0,y,image->columns,1,exception); @@ -491,6 +500,7 @@ static Image *ReadYUVImage(const ImageInfo *image_info,ExceptionInfo *exception) AcquireNextImage(image_info,image,exception); if (GetNextImageInList(image) == (Image *) NULL) { + scanline=(unsigned char *) RelinquishMagickMemory(scanline); image=DestroyImageList(image); return((Image *) NULL); }