]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sat, 31 Jan 2015 18:13:18 +0000 (18:13 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sat, 31 Jan 2015 18:13:18 +0000 (18:13 +0000)
coders/gif.c

index ebe5d4b911c37e9f7c3b89ced45ef911bb87610e..e98ee13c26c1d08e09ad175ee3d77e4500a30726 100644 (file)
@@ -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)