global_colors,
image_count,
iterations,
+ local_colors,
one;
ssize_t
image->depth=8;
flag=(unsigned char) ReadBlobByte(image);
image->interlace=BitSet((int) flag,0x40) != 0 ? GIFInterlace : NoInterlace;
- image->colors=BitSet((int) flag,0x80) == 0 ? global_colors : one <<
+ local_colors=BitSet((int) flag,0x80) == 0 ? global_colors : one <<
((size_t) (flag & 0x07)+1);
+ image->colors=local_colors;
if (opacity >= (ssize_t) image->colors)
image->colors=opacity+1;
image->page.width=page.width;
/*
Read local colormap.
*/
- colormap=(unsigned char *) AcquireQuantumMemory(image->colors,3*
- sizeof(*colormap));
+ colormap=(unsigned char *) AcquireQuantumMemory((size_t)
+ MagickMax(local_colors,256),3UL*sizeof(*colormap));
if (colormap == (unsigned char *) NULL)
{
global_colormap=(unsigned char *) RelinquishMagickMemory(
meta_image=DestroyImage(meta_image);
ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
}
- count=ReadBlob(image,(3*image->colors)*sizeof(*colormap),colormap);
- if (count != (ssize_t) (3*image->colors))
+ (void) ResetMagickMemory(colormap,0,3*MagickMax(local_colors,256)*
+ sizeof(*colormap));
+ count=ReadBlob(image,(3*local_colors)*sizeof(*colormap),colormap);
+ if (count != (ssize_t) (3*local_colors))
{
global_colormap=(unsigned char *) RelinquishMagickMemory(
global_colormap);
for (i=0; i < (ssize_t) image->colors; i++)
if (IsPixelInfoGray(image->colormap+i) == MagickFalse)
break;
- (void) SetImageColorspace(image,i == (ssize_t) image->colors ?
+ (void) SetImageColorspace(image,i == (ssize_t) image->colors ?
GRAYColorspace : RGBColorspace,exception);
}
if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0))
if ((LocaleCompare(write_info->magick,"GIF87") != 0) &&
(value != (const char *) NULL))
{
- register const char
+ register const char
*p;
size_t
count;
-
+
/*
Write comment extension.
*/