From ca3be0f660bffee571dbaf1761ab6330fd89a112 Mon Sep 17 00:00:00 2001 From: cristy <cristy@aa41f4f7-0bf4-0310-aa73-e5a19afd5a74> Date: Mon, 1 Dec 2014 23:10:02 +0000 Subject: Do not try to read corrupted sun image git-svn-id: https://subversion.imagemagick.org/subversion/ImageMagick/branches/ImageMagick-6@17146 aa41f4f7-0bf4-0310-aa73-e5a19afd5a74 origin: http://trac.imagemagick.org/changeset/17146 diff --git a/coders/sun.c b/coders/sun.c index 4cd4caf..02251b3 100644 --- a/coders/sun.c +++ b/coders/sun.c @@ -256,6 +256,7 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) *p; size_t + bytes_per_line, length; ssize_t @@ -269,9 +270,6 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) *sun_data, *sun_pixels; - unsigned int - bytes_per_line; - /* Open image file. */ @@ -490,11 +488,13 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) else if (image->storage_class == PseudoClass) { + if (bytes_per_line == 0) + bytes_per_line=image->columns; length=image->rows*(image->columns+image->columns % 2); if (((sun_info.type == RT_ENCODED) && (length > (bytes_per_line*image->rows))) || ((sun_info.type != RT_ENCODED) && (length > sun_info.length))) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowReaderException(CorruptImageError,"UnableToReadImageData"); for (y=0; y < (ssize_t) image->rows; y++) { q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); @@ -524,12 +524,14 @@ static Image *ReadSUNImage(const ImageInfo *image_info,ExceptionInfo *exception) bytes_per_pixel=3; if (image->matte != MagickFalse) bytes_per_pixel++; - length=image->rows*((bytes_per_line*image->columns)+ - image->columns % 2); + if (bytes_per_line == 0) + bytes_per_line=bytes_per_pixel*image->columns; + length=image->rows*((bytes_per_line*image->columns)+image->columns % + 2); if (((sun_info.type == RT_ENCODED) && (length > (bytes_per_line*image->rows))) || ((sun_info.type != RT_ENCODED) && (length > sun_info.length))) - ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); + ThrowReaderException(CorruptImageError,"UnableToReadImageData"); for (y=0; y < (ssize_t) image->rows; y++) { q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); -- cgit v0.10.2