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)
#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"
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);