From: cristy Date: Sat, 31 Jan 2015 18:13:18 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~1335 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cc3a7e7b06455f06fd2497d3ac9ab73efb5c20c5;p=imagemagick --- diff --git a/coders/gif.c b/coders/gif.c index ebe5d4b91..e98ee13c2 100644 --- a/coders/gif.c +++ b/coders/gif.c @@ -396,13 +396,11 @@ static MagickBooleanType DecodeImage(Image *image,const ssize_t opacity, LZWInfo *lzw_info; - Quantum - index; - size_t pass; ssize_t + index, offset, y; @@ -441,11 +439,10 @@ static MagickBooleanType DecodeImage(Image *image,const ssize_t opacity, c=ReadBlobLZWByte(lzw_info); if (c < 0) break; - index=ConstrainColormapIndex(image,(size_t) c,exception); - SetPixelIndex(image,index,q); - SetPixelViaPixelInfo(image,image->colormap+(ssize_t) index,q); - SetPixelAlpha(image,(ssize_t) index == opacity ? TransparentAlpha : - OpaqueAlpha,q); + index=ConstrainColormapIndex(image,(ssize_t) c,exception); + SetPixelIndex(image,(Quantum) index,q); + SetPixelViaPixelInfo(image,image->colormap+index,q); + SetPixelAlpha(image,index == opacity ? TransparentAlpha : OpaqueAlpha,q); x++; q+=GetPixelChannels(image); } @@ -1025,7 +1022,15 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) if (global_colormap == (unsigned char *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); if (BitSet((int) flag,0x80) != 0) - (void) ReadBlob(image,(size_t) (3*global_colors),global_colormap); + { + count=ReadBlob(image,(size_t) (3*global_colors),global_colormap); + if (count != (ssize_t) (3*global_colors)) + { + global_colormap=(unsigned char *) RelinquishMagickMemory( + global_colormap); + ThrowReaderException(CorruptImageError,"InsufficientImageDataInFile"); + } + } delay=0; dispose=0; duration=0; @@ -1145,7 +1150,8 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) number_extensionss++; (void) LogMagickEvent(CoderEvent,GetMagickModule(), " Reading GIF application extension"); - info=(unsigned char *) AcquireQuantumMemory(255UL,sizeof(*info)); + info=(unsigned char *) AcquireQuantumMemory(255UL, + sizeof(*info)); if (info == (unsigned char *) NULL) ThrowReaderException(ResourceLimitError, "MemoryAllocationFailed"); @@ -1222,9 +1228,9 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) Read image attributes. */ meta_image->scene=image->scene; - CloneImageProperties(image,meta_image); + (void) CloneImageProperties(image,meta_image); DestroyImageProperties(meta_image); - CloneImageProfiles(image,meta_image); + (void) CloneImageProfiles(image,meta_image); DestroyImageProfiles(meta_image); image->storage_class=PseudoClass; image->compression=LZWCompression; @@ -1281,8 +1287,8 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) image->transparent_color=image->colormap[opacity]; } } - image->background_color=image->colormap[MagickMin(background, - image->colors-1)]; + image->background_color=image->colormap[MagickMin((ssize_t) background, + (ssize_t) image->colors-1)]; } else { @@ -1735,7 +1741,7 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, attributes[MaxTextExtent]; ssize_t - length; + count; /* Write ImageMagick extension. @@ -1746,10 +1752,10 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, (void) WriteBlobByte(image,(unsigned char) 0xff); (void) WriteBlobByte(image,(unsigned char) 0x0b); (void) WriteBlob(image,11,(unsigned char *) "ImageMagick"); - length=FormatLocaleString(attributes,MaxTextExtent,"gamma=%g", + count=FormatLocaleString(attributes,MaxTextExtent,"gamma=%g", image->gamma); - (void) WriteBlobByte(image,(unsigned char) length); - (void) WriteBlob(image,length,(unsigned char *) attributes); + (void) WriteBlobByte(image,(unsigned char) count); + (void) WriteBlob(image,(size_t) count,(unsigned char *) attributes); (void) WriteBlobByte(image,(unsigned char) 0x00); } ResetImageProfileIterator(image); @@ -1830,7 +1836,7 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, sizeof(extension)); (void) WriteBlob(image,11,(unsigned char *) extension); (void) LogMagickEvent(CoderEvent,GetMagickModule(), - " Writing GIF Extension %s",name); + " Writing GIF Extension %s",name); } offset=0; while ((ssize_t) length > offset)