size_t
bit,
- byte;
-
- size_t
+ byte,
bytes_per_line,
+ one,
scanline_pad;
/*
icon_file.directory[i].size=ReadBlobLSBLong(image);
icon_file.directory[i].offset=ReadBlobLSBLong(image);
}
+ one=1;
for (i=0; i < icon_file.count; i++)
{
/*
if (png == (unsigned char *) NULL)
ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
(void) CopyMagickMemory(png,"\211PNG\r\n\032\n\000\000\000\015",12);
- count=ReadBlob(image,length,png+12);
- if (count != (ssize_t) length)
+ count=ReadBlob(image,length-12,png+12);
+ if (count != (ssize_t) (length-12))
{
png=(unsigned char *) RelinquishMagickMemory(png);
ThrowReaderException(CorruptImageError,
image->rows=(size_t) icon_file.directory[i].height;
if ((ssize_t) image->rows > icon_info.height)
image->rows=(size_t) icon_info.height;
- image->depth=8;
+ image->depth=icon_info.bits_per_pixel;
if (image->debug != MagickFalse)
{
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " scene = %ld",i);
+ " scene = %.20g",(double) i);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " size = %ld",icon_info.size);
+ " size = %.20g",(double) icon_info.size);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " width = %d",icon_file.directory[i].width);
+ " width = %.20g",(double) icon_file.directory[i].width);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " height = %d",icon_file.directory[i].height);
+ " height = %.20g",(double) icon_file.directory[i].height);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " colors = %ld",icon_info.number_colors);
+ " colors = %.20g",(double ) icon_info.number_colors);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " planes = %d",icon_info.planes);
+ " planes = %.20g",(double) icon_info.planes);
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
- " bpp = %d",icon_info.bits_per_pixel);
+ " bpp = %.20g",(double) icon_info.bits_per_pixel);
}
if ((icon_info.number_colors != 0) || (icon_info.bits_per_pixel <= 16))
{
image->storage_class=PseudoClass;
image->colors=icon_info.number_colors;
if (image->colors == 0)
- image->colors=1 << icon_info.bits_per_pixel;
+ image->colors=one << icon_info.bits_per_pixel;
}
if (image->storage_class == PseudoClass)
{
*icon_colormap;
size_t
- number_colors;
+ number_colors,
+ one;
/*
Read Icon raster colormap.
*/
- number_colors=1UL << icon_info.bits_per_pixel;
+ one=1;
+ number_colors=one << icon_info.bits_per_pixel;
if (AcquireImageColormap(image,number_colors) == MagickFalse)
ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
icon_colormap=(unsigned char *) AcquireQuantumMemory((size_t)
default:
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
}
- (void) SyncImage(image);
+ if (image_info->ping == MagickFalse)
+ (void) SyncImage(image);
if (icon_info.bits_per_pixel != 32)
{
/*
(void) WriteBlobByte(image,icon_file.directory[scene].reserved);
(void) WriteBlobLSBShort(image,icon_file.directory[scene].planes);
(void) WriteBlobLSBShort(image,icon_file.directory[scene].bits_per_pixel);
- (void) WriteBlobLSBLong(image,icon_file.directory[scene].size);
- (void) WriteBlobLSBLong(image,icon_file.directory[scene].offset);
+ (void) WriteBlobLSBLong(image,(unsigned int)
+ icon_file.directory[scene].size);
+ (void) WriteBlobLSBLong(image,(unsigned int)
+ icon_file.directory[scene].offset);
scene++;
next=SyncNextImageInList(next);
} while ((next != (Image *) NULL) && (image_info->adjoin != MagickFalse));
}
else
{
+ size_t
+ one;
+
/*
Colormapped ICON raster.
*/
icon_info.bits_per_pixel=4;
if (next->colors <= 2)
icon_info.bits_per_pixel=1;
- icon_info.number_colors=1 << icon_info.bits_per_pixel;
+ one=1;
+ icon_info.number_colors=one << icon_info.bits_per_pixel;
if (icon_info.number_colors < next->colors)
{
(void) SetImageStorageClass(next,DirectClass);
}
else
{
- icon_info.file_size+=3*(1UL << icon_info.bits_per_pixel);
- icon_info.offset_bits+=3*(1UL << icon_info.bits_per_pixel);
- icon_info.file_size+=(1UL << icon_info.bits_per_pixel);
- icon_info.offset_bits+=(1UL << icon_info.bits_per_pixel);
+ size_t
+ one;
+
+ one=1;
+ icon_info.file_size+=3*(one << icon_info.bits_per_pixel);
+ icon_info.offset_bits+=3*(one << icon_info.bits_per_pixel);
+ icon_info.file_size+=(one << icon_info.bits_per_pixel);
+ icon_info.offset_bits+=(one << icon_info.bits_per_pixel);
}
}
bytes_per_line=(((next->columns*icon_info.bits_per_pixel)+31) &
icon_file.directory[scene].bits_per_pixel=icon_info.bits_per_pixel;
icon_file.directory[scene].size=icon_info.size;
icon_file.directory[scene].offset=(size_t) TellBlob(image);
- (void) WriteBlobLSBLong(image,(size_t) 40);
- (void) WriteBlobLSBLong(image,(size_t) icon_info.width);
- (void) WriteBlobLSBLong(image,(size_t) icon_info.height*2);
+ (void) WriteBlobLSBLong(image,(unsigned int) 40);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.width);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.height*2);
(void) WriteBlobLSBShort(image,icon_info.planes);
(void) WriteBlobLSBShort(image,icon_info.bits_per_pixel);
- (void) WriteBlobLSBLong(image,icon_info.compression);
- (void) WriteBlobLSBLong(image,icon_info.image_size);
- (void) WriteBlobLSBLong(image,icon_info.x_pixels);
- (void) WriteBlobLSBLong(image,icon_info.y_pixels);
- (void) WriteBlobLSBLong(image,icon_info.number_colors);
- (void) WriteBlobLSBLong(image,icon_info.colors_important);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.compression);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.image_size);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.x_pixels);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.y_pixels);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.number_colors);
+ (void) WriteBlobLSBLong(image,(unsigned int) icon_info.colors_important);
if (next->storage_class == PseudoClass)
{
unsigned char
(void) WriteBlobByte(image,icon_file.directory[scene].reserved);
(void) WriteBlobLSBShort(image,icon_file.directory[scene].planes);
(void) WriteBlobLSBShort(image,icon_file.directory[scene].bits_per_pixel);
- (void) WriteBlobLSBLong(image,icon_file.directory[scene].size);
- (void) WriteBlobLSBLong(image,icon_file.directory[scene].offset);
+ (void) WriteBlobLSBLong(image,(unsigned int)
+ icon_file.directory[scene].size);
+ (void) WriteBlobLSBLong(image,(unsigned int)
+ icon_file.directory[scene].offset);
scene++;
next=SyncNextImageInList(next);
} while ((next != (Image *) NULL) && (image_info->adjoin != MagickFalse));