File ImageMagick-CVE-2019-7397.patch of Package ImageMagick.12053
Index: ImageMagick-6.8.8-1/coders/pdf.c
===================================================================
--- ImageMagick-6.8.8-1.orig/coders/pdf.c 2019-02-11 16:20:46.713857928 +0100
+++ ImageMagick-6.8.8-1/coders/pdf.c 2019-02-11 17:13:31.529554520 +0100
@@ -1690,7 +1690,10 @@ RestoreMSCWarning
offset=TellBlob(image);
number_pixels=(MagickSizeType) image->columns*image->rows;
if ((4*number_pixels) != (MagickSizeType) ((size_t) (4*number_pixels)))
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
+ }
if ((compression == FaxCompression) || (compression == Group4Compression) ||
((image_info->type != TrueColorType) &&
(IsGrayImage(image,&image->exception) != MagickFalse)))
@@ -1713,7 +1716,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,image,"jpeg",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,image->exception.reason);
+ }
break;
}
case JPEG2000Compression:
@@ -1721,7 +1727,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,image,"jp2",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,image->exception.reason);
+ }
break;
}
case RLECompression:
@@ -1736,7 +1745,10 @@ RestoreMSCWarning
length=(size_t) number_pixels;
pixel_info=AcquireVirtualMemory(length,sizeof(*pixels));
if (pixel_info == (MemoryInfo *) NULL)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
+ }
pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info);
/*
Dump Runlength encoded pixels.
@@ -1773,6 +1785,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}
@@ -1819,7 +1832,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,image,"jpeg",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,image->exception.reason);
+ }
break;
}
case JPEG2000Compression:
@@ -1827,7 +1843,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,image,"jp2",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,image->exception.reason);
+ }
break;
}
case RLECompression:
@@ -1888,6 +1907,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}
@@ -1988,6 +2008,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}
@@ -2070,7 +2091,10 @@ RestoreMSCWarning
tile_image=ThumbnailImage(image,geometry.width,geometry.height,
&image->exception);
if (tile_image == (Image *) NULL)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,image->exception.reason);
+ }
xref[object++]=TellBlob(image);
(void) FormatLocaleString(buffer,MaxTextExtent,"%.20g 0 obj\n",(double)
object);
@@ -2175,7 +2199,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,tile_image,"jpeg",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,tile_image->exception.reason);
+ }
break;
}
case JPEG2000Compression:
@@ -2183,7 +2210,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,tile_image,"jp2",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,tile_image->exception.reason);
+ }
break;
}
case RLECompression:
@@ -2200,6 +2230,7 @@ RestoreMSCWarning
if (pixel_info == (MemoryInfo *) NULL)
{
tile_image=DestroyImage(tile_image);
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,
"MemoryAllocationFailed");
}
@@ -2233,6 +2264,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}
@@ -2273,7 +2305,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,tile_image,"jpeg",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,tile_image->exception.reason);
+ }
break;
}
case JPEG2000Compression:
@@ -2281,7 +2316,10 @@ RestoreMSCWarning
status=InjectImageBlob(image_info,image,tile_image,"jp2",
&image->exception);
if (status == MagickFalse)
+ {
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(CoderError,tile_image->exception.reason);
+ }
break;
}
case RLECompression:
@@ -2299,6 +2337,7 @@ RestoreMSCWarning
if (pixel_info == (MemoryInfo *) NULL)
{
tile_image=DestroyImage(tile_image);
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,
"MemoryAllocationFailed");
}
@@ -2336,6 +2375,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}
@@ -2393,6 +2433,7 @@ RestoreMSCWarning
if (pixel_info == (MemoryInfo *) NULL)
{
tile_image=DestroyImage(tile_image);
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,
"MemoryAllocationFailed");
}
@@ -2423,6 +2464,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}
@@ -2598,6 +2640,7 @@ RestoreMSCWarning
if (pixel_info == (MemoryInfo *) NULL)
{
image=DestroyImage(image);
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
ThrowWriterException(ResourceLimitError,
"MemoryAllocationFailed");
}
@@ -2629,6 +2672,7 @@ RestoreMSCWarning
pixel_info=RelinquishVirtualMemory(pixel_info);
if (status == MagickFalse)
{
+ xref=(MagickOffsetType *) RelinquishMagickMemory(xref);
(void) CloseBlob(image);
return(MagickFalse);
}