assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
+ if (length != (MagickSizeType) ((MagickOffsetType) length))
+ return(MagickFalse);
count=0;
for (i=0; i < (MagickOffsetType) length; i+=count)
{
quantum=psd_info->version == 1 ? 4UL : 8UL;
(void) ReadBlobMSBLong(image);
count=ReadBlob(image,4,(unsigned char *) type);
+ status=MagickFalse;
if ((count == 0) || (LocaleNCompare(type,"8BIM",4) != 0))
{
- if (DiscardBlobBytes(image,((MagickSizeType) size-quantum-8)) ==
- MagickFalse)
+ if (size >= (quantum+8))
+ status=DiscardBlobBytes(image,(MagickSizeType) (size-quantum-8));
+ if (status == MagickFalse)
ThrowBinaryException(CorruptImageError,"UnexpectedEndOfFile",
image->filename);
}
if ((count != 0) && (LocaleNCompare(type,"Lr16",4) == 0))
size=GetPSDSize(psd_info,image);
else
- if (DiscardBlobBytes(image,((MagickSizeType) size-quantum-12)) ==
- MagickFalse)
- ThrowBinaryException(CorruptImageError,"UnexpectedEndOfFile",
- image->filename);
+ {
+ if (size >= (quantum+12))
+ status=DiscardBlobBytes(image,(MagickSizeType) (size-quantum-12));
+ if (status == MagickFalse)
+ ThrowBinaryException(CorruptImageError,"UnexpectedEndOfFile",
+ image->filename);
+ }
}
}
status=MagickTrue;