Commit 332c1566a for imagemagick.org
commit 332c1566acc2de77857032d3c2504ead6210ff50
Author: Cristy <urban-warrior@imagemagick.org>
Date: Thu Jan 22 19:25:35 2026 -0500
https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-pqgj-2p96-rx85
diff --git a/coders/pcd.c b/coders/pcd.c
index d0b7a50c5..e6326f5a4 100644
--- a/coders/pcd.c
+++ b/coders/pcd.c
@@ -116,19 +116,26 @@ static MagickBooleanType DecodeImage(Image *image,unsigned char *luma,
#define IsSync(sum) ((sum & 0xffffff00UL) == 0xfffffe00UL)
#define PCDGetBits(n) \
{ \
+ ssize_t \
+ byte_count = 0x800; \
+ \
sum=(sum << n) & 0xffffffff; \
bits-=n; \
while (bits <= 24) \
{ \
if (p >= (buffer+0x800)) \
{ \
- (void) ReadBlob(image,0x800,buffer); \
+ byte_count=ReadBlob(image,0x800,buffer); \
+ if (byte_count != 0x800) \
+ break; \
p=buffer; \
} \
sum|=(((unsigned int) (*p)) << (24-bits)); \
bits+=8; \
p++; \
} \
+ if (byte_count != 0x800) \
+ break; \
}
typedef struct PCDTable
@@ -164,9 +171,9 @@ static MagickBooleanType DecodeImage(Image *image,unsigned char *luma,
quantum;
unsigned char
+ *buffer,
*p,
- *q,
- *buffer;
+ *q;
/*
Initialize Huffman tables.
@@ -491,36 +498,32 @@ static Image *ReadPCDImage(const ImageInfo *image_info,ExceptionInfo *exception)
MemoryInfo
*pixel_info;
- ssize_t
- i,
- y;
-
Quantum
*q;
- unsigned char
- *c1,
- *c2,
- *yy;
-
size_t
+ extent,
height,
number_images,
number_pixels,
rotate,
scene,
- size,
width;
ssize_t
count,
- x;
+ i,
+ x,
+ y;
unsigned char
+ *c1,
+ *c2,
*chroma1,
*chroma2,
*header,
- *luma;
+ *luma,
+ *yy;
unsigned int
overview;
@@ -609,13 +612,13 @@ static Image *ReadPCDImage(const ImageInfo *image_info,ExceptionInfo *exception)
/*
Allocate luma and chroma memory.
*/
- if (HeapOverflowSanityCheckGetSize(image->columns+1UL,image->rows,&size) != MagickFalse)
+ if (HeapOverflowSanityCheckGetSize(image->columns+1UL,image->rows,&extent) != MagickFalse)
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
- if (HeapOverflowSanityCheckGetSize(size,10,&number_pixels) != MagickFalse)
+ if (HeapOverflowSanityCheckGetSize(extent,10,&number_pixels) != MagickFalse)
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
- if (HeapOverflowSanityCheckGetSize(size,30,&size) != MagickFalse)
+ if (HeapOverflowSanityCheckGetSize(extent,30,&extent) != MagickFalse)
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
- pixel_info=AcquireVirtualMemory(size,sizeof(*luma));
+ pixel_info=AcquireVirtualMemory(extent,sizeof(*luma));
if (pixel_info == (MemoryInfo *) NULL)
ThrowPCDException(ResourceLimitError,"MemoryAllocationFailed");
luma=(unsigned char *) GetVirtualMemoryBlob(pixel_info);