]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sat, 29 Nov 2014 15:28:30 +0000 (15:28 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sat, 29 Nov 2014 15:28:30 +0000 (15:28 +0000)
MagickCore/colormap-private.h
coders/viff.c

index 03d56aa900fb0c6b033bc6dbda7a2741022ffbb6..6be23e87db977a090e3b44dafa60967725c7afc5 100644 (file)
 extern "C" {
 #endif
 
-static inline Quantum ConstrainColormapIndex(Image *image,const size_t index,
+static inline ssize_t ConstrainColormapIndex(Image *image,const ssize_t index,
   ExceptionInfo *exception)
 {
-  if (index < image->colors)
-    return((Quantum) index);
-  (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
-    "InvalidColormapIndex","`%s'",image->filename);
-  return((Quantum) 0);
+  if ((index < 0) || (index >= image->colors))
+    {
+      (void) ThrowMagickException(exception,GetMagickModule(),CorruptImageError,
+        "InvalidColormapIndex","`%s'",image->filename);
+      return(0);
+    }
+  return(index);
 }
 
 #if defined(__cplusplus) || defined(c_plusplus)
index 90b679b64bf00ee7a85550692c81e44ecefb390b..13b2e03101b78a3826b08f99d366abcfc1ef2f8c 100644 (file)
@@ -47,6 +47,7 @@
 #include "MagickCore/color.h"
 #include "MagickCore/color-private.h"
 #include "MagickCore/colormap.h"
+#include "MagickCore/colormap-private.h"
 #include "MagickCore/colorspace.h"
 #include "MagickCore/colorspace-private.h"
 #include "MagickCore/exception.h"
@@ -674,12 +675,18 @@ static Image *ReadVIFFImage(const ImageInfo *image_info,
               SetPixelBlue(image,ScaleCharToQuantum(*(p+2*number_pixels)),q);
               if (image->colors != 0)
                 {
-                  SetPixelRed(image,image->colormap[(ssize_t)
-                    GetPixelRed(image,q)].red,q);
-                  SetPixelGreen(image,image->colormap[(ssize_t)
-                    GetPixelGreen(image,q)].green,q);
-                  SetPixelBlue(image,image->colormap[(ssize_t)
-                    GetPixelBlue(image,q)].blue,q);
+                  ssize_t
+                    index;
+                  
+                  index=(ssize_t) GetPixelRed(image,q);
+                  SetPixelRed(image,image->colormap[
+                    ConstrainColormapIndex(image,index,exception)].red,q);
+                  index=(ssize_t) GetPixelGreen(image,q);
+                  SetPixelGreen(image,image->colormap[
+                    ConstrainColormapIndex(image,index,exception)].green,q);
+                  index=(ssize_t) GetPixelBlue(image,q);
+                  SetPixelBlue(image,image->colormap[
+                    ConstrainColormapIndex(image,index,exception)].blue,q);
                 }
               SetPixelAlpha(image,image->alpha_trait == BlendPixelTrait ?
                 ScaleCharToQuantum(*(p+number_pixels*3)) : OpaqueAlpha,q);