From 6b4aff0f117b978502ee5bcd6e753c17aec5a961 Mon Sep 17 00:00:00 2001 From: cristy Date: Tue, 13 Jan 2015 12:16:28 +0000 Subject: [PATCH] --- coders/sun.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/coders/sun.c b/coders/sun.c index 04915bc3d..7edf41b3a 100644 --- a/coders/sun.c +++ b/coders/sun.c @@ -408,7 +408,7 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) return(DestroyImageList(image)); if ((sun_info.length*sizeof(*sun_data))/sizeof(*sun_data) != sun_info.length || !sun_info.length) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowReaderException(ResourceLimitError,"ImproperImageHeader"); number_pixels=(MagickSizeType) image->columns*image->rows; if ((sun_info.type != RT_ENCODED) && ((number_pixels*sun_info.depth) > (8*sun_info.length))) @@ -424,11 +424,11 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) height=sun_info.height; if ((height == 0) || (sun_info.width == 0) || (sun_info.depth == 0) || ((bytes_per_line/sun_info.depth) != sun_info.width)) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowReaderException(ResourceLimitError,"ImproperImageHeader"); bytes_per_line+=15; bytes_per_line<<=1; if ((bytes_per_line >> 1) != (sun_info.width*sun_info.depth+15)) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowReaderException(ResourceLimitError,"ImproperImageHeader"); bytes_per_line>>=4; sun_pixels=(unsigned char *) AcquireQuantumMemory(height, bytes_per_line*sizeof(*sun_pixels)); @@ -437,6 +437,12 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) if (sun_info.type == RT_ENCODED) (void) DecodeImage(sun_data,sun_info.length,sun_pixels,bytes_per_line* height); + else + { + if (sun_info.length > (height*bytes_per_line)) + ThrowReaderException(ResourceLimitError,"ImproperImageHeader"); + (void) CopyMagickMemory(sun_pixels,sun_data,sun_info.length); + } sun_data=(unsigned char *) RelinquishMagickMemory(sun_data); /* Convert SUN raster image to pixel packets. -- 2.40.0