openbsd-ports/graphics/ImageMagick/patches/patch-coders_png_c

65 lines
2.4 KiB
Plaintext

$OpenBSD: patch-coders_png_c,v 1.1 2004/08/13 06:17:41 brad Exp $
--- coders/png.c.orig Thu Aug 12 22:54:19 2004
+++ coders/png.c Thu Aug 12 23:04:05 2004
@@ -1372,6 +1372,8 @@ static void PNGErrorHandler(png_struct *
Image
*image;
+ if (LocaleCompare(message, "Missing PLTE before tRNS") == 0)
+ png_error(ping, message);
image=(Image *) png_get_error_ptr(ping);
if (image->debug != False)
(void) LogMagickEvent(CoderEvent,GetMagickModule(),
@@ -1600,6 +1602,20 @@ static Image *ReadOnePNGImage(MngInfo *m
length,
row_offset;
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_byte unused_chunks[]=
+ {
+ 104, 73, 83, 84, '\0', /* hIST */
+ 105, 84, 88, 116, '\0', /* iTXt */
+ 112, 67, 65, 76, '\0', /* pCAL */
+ 115, 67, 65, 76, '\0', /* sCAL */
+ 115, 80, 76, 84, '\0', /* sPLT */
+ 116, 69, 88, 116, '\0', /* tEXt */
+ 116, 73, 77, 69, '\0', /* tIME */
+ 122, 84, 88, 116, '\0', /* zTXt */
+ };
+#endif
+
logging=LogMagickEvent(CoderEvent,GetMagickModule(),
" enter ReadOnePNGImage()");
@@ -1685,6 +1701,12 @@ static Image *ReadOnePNGImage(MngInfo *m
else
png_set_read_fn(ping,image,png_get_data);
+#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* Ignore unused chunks */
+ png_set_keep_unknown_chunks(ping, 0, unused_chunks,
+ (int)sizeof(unused_chunks)/5);
+#endif
+
#if defined(PNG_USE_PNGGCCRD) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) \
&& (PNG_LIBPNG_VER >= 10200)
/* Disable thread-unsafe features of pnggccrd */
@@ -2551,7 +2573,7 @@ static Image *ReadOnePNGImage(MngInfo *m
*value;
length=text[i].text_length;
- value=(char *) AcquireMagickMemory(length+1);
+ value=(char *) AcquireMagickMemory(length+MaxTextExtent);
if (value == (char *) NULL)
{
(void) ThrowMagickException(&image->exception,GetMagickModule(),
@@ -2623,6 +2645,8 @@ static Image *ReadOnePNGImage(MngInfo *m
image->filename);
png_get_IHDR(ping,ping_info,&width,&height,&bit_depth,&color_type,
&interlace_method,&compression_method,&filter_method);
+ if (width > 250000L || height > 250000L)
+ png_error(ping,"PNG Image dimensions are too large.");
mng_info->ob[object_id]->width=width;
mng_info->ob[object_id]->height=height;
mng_info->ob[object_id]->color_type=color_type;