const unsigned char *compact_pixels,const ssize_t depth,
const size_t number_pixels,unsigned char *pixels)
{
+#define CheckNumberCompactPixels \
+ if (packets == 0) \
+ return(i); \
+ packets--
+
+#define CheckNumberPixels(count) \
+ if (((ssize_t) i + count) > (ssize_t) number_pixels) \
+ return(i); \
+ i+=count
+
int
pixel;
packets=(ssize_t) number_compact_pixels;
for (i=0; (packets > 1) && (i < (ssize_t) number_pixels); )
{
+ CheckNumberCompactPixels;
length=(size_t) (*compact_pixels++);
- packets--;
if (length == 128)
continue;
if (length > 128)
{
length=256-length+1;
- if (((ssize_t) length+i) > (ssize_t) number_pixels)
- length=number_pixels-(size_t) i;
+ CheckNumberCompactPixels;
pixel=(*compact_pixels++);
- packets--;
for (j=0; j < (ssize_t) length; j++)
{
switch (depth)
{
case 1:
{
+ CheckNumberPixels(8);
*pixels++=(pixel >> 7) & 0x01 ? 0U : 255U;
*pixels++=(pixel >> 6) & 0x01 ? 0U : 255U;
*pixels++=(pixel >> 5) & 0x01 ? 0U : 255U;
*pixels++=(pixel >> 2) & 0x01 ? 0U : 255U;
*pixels++=(pixel >> 1) & 0x01 ? 0U : 255U;
*pixels++=(pixel >> 0) & 0x01 ? 0U : 255U;
- i+=8;
- break;
- }
- case 4:
- {
- *pixels++=(unsigned char) ((pixel >> 4) & 0xff);
- *pixels++=(unsigned char) ((pixel & 0x0f) & 0xff);
- i+=2;
break;
}
case 2:
{
+ CheckNumberPixels(4);
*pixels++=(unsigned char) ((pixel >> 6) & 0x03);
*pixels++=(unsigned char) ((pixel >> 4) & 0x03);
*pixels++=(unsigned char) ((pixel >> 2) & 0x03);
*pixels++=(unsigned char) ((pixel & 0x03) & 0x03);
- i+=4;
+ break;
+ }
+ case 4:
+ {
+ CheckNumberPixels(2);
+ *pixels++=(unsigned char) ((pixel >> 4) & 0xff);
+ *pixels++=(unsigned char) ((pixel & 0x0f) & 0xff);
break;
}
default:
{
+ CheckNumberPixels(1);
*pixels++=(unsigned char) pixel;
- i++;
break;
}
}
continue;
}
length++;
- if (((ssize_t) length+i) > (ssize_t) number_pixels)
- length=number_pixels-(size_t) i;
for (j=0; j < (ssize_t) length; j++)
{
switch (depth)
{
case 1:
{
+ CheckNumberPixels(8);
*pixels++=(*compact_pixels >> 7) & 0x01 ? 0U : 255U;
*pixels++=(*compact_pixels >> 6) & 0x01 ? 0U : 255U;
*pixels++=(*compact_pixels >> 5) & 0x01 ? 0U : 255U;
*pixels++=(*compact_pixels >> 2) & 0x01 ? 0U : 255U;
*pixels++=(*compact_pixels >> 1) & 0x01 ? 0U : 255U;
*pixels++=(*compact_pixels >> 0) & 0x01 ? 0U : 255U;
- i+=8;
- break;
- }
- case 4:
- {
- *pixels++=(*compact_pixels >> 4) & 0xff;
- *pixels++=(*compact_pixels & 0x0f) & 0xff;
- i+=2;
break;
}
case 2:
{
+ CheckNumberPixels(4);
*pixels++=(*compact_pixels >> 6) & 0x03;
*pixels++=(*compact_pixels >> 4) & 0x03;
*pixels++=(*compact_pixels >> 2) & 0x03;
*pixels++=(*compact_pixels & 0x03) & 0x03;
- i+=4;
+ break;
+ }
+ case 4:
+ {
+ CheckNumberPixels(2);
+ *pixels++=(*compact_pixels >> 4) & 0xff;
+ *pixels++=(*compact_pixels & 0x0f) & 0xff;
break;
}
default:
{
+ CheckNumberPixels(1);
*pixels++=(*compact_pixels);
- i++;
break;
}
}
+ CheckNumberCompactPixels;
compact_pixels++;
}
}
" layer data is RAW");
row_size=GetPSDRowSize(image);
- pixels=(unsigned char *) AcquireQuantumMemory(row_size,8*sizeof(*pixels));
+ pixels=(unsigned char *) AcquireQuantumMemory(row_size,sizeof(*pixels));
if (pixels == (unsigned char *) NULL)
ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
image->filename);
" layer data is RLE compressed");
row_size=GetPSDRowSize(image);
- pixels=(unsigned char *) AcquireQuantumMemory(row_size,8*sizeof(*pixels));
+ pixels=(unsigned char *) AcquireQuantumMemory(row_size,sizeof(*pixels));
if (pixels == (unsigned char *) NULL)
ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
image->filename);
image->filename);
}
- compact_pixels=(unsigned char *) AcquireQuantumMemory(length,
- 8*sizeof(*pixels));
+ compact_pixels=(unsigned char *) AcquireQuantumMemory(length,sizeof(*pixels));
if (compact_pixels == (unsigned char *) NULL)
{
pixels=(unsigned char *) RelinquishMagickMemory(pixels);