]> granicus.if.org Git - imagemagick/commitdiff
Added options to set png_set_chunk_cache_max and png_set_chunk_malloc_max.
authorDirk Lemstra <dirk@git.imagemagick.org>
Tue, 19 Jun 2018 05:16:50 +0000 (07:16 +0200)
committerDirk Lemstra <dirk@git.imagemagick.org>
Tue, 19 Jun 2018 05:17:25 +0000 (07:17 +0200)
coders/png.c

index 058594e13e2e887061a27da23841a5333cede048..8547cad3e2d86897371fe0da5c9e2a372b6bbd51 100644 (file)
@@ -2426,12 +2426,31 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
 #endif
 
 #ifdef PNG_SET_USER_LIMITS_SUPPORTED
-  /* Reject images with too many rows or columns */
-  png_set_user_limits(ping,
-    (png_uint_32) MagickMin(0x7fffffffL,
-        GetMagickResourceLimit(WidthResource)),
-    (png_uint_32) MagickMin(0x7fffffffL,
-        GetMagickResourceLimit(HeightResource)));
+  {
+    const char
+      *option;
+
+    /* Reject images with too many rows or columns */
+    png_set_user_limits(ping,(png_uint_32) MagickMin(PNG_UINT_31_MAX,
+      GetMagickResourceLimit(WidthResource)),(png_uint_32)
+      MagickMin(PNG_UINT_31_MAX,GetMagickResourceLimit(HeightResource)));
+
+#if (PNG_LIBPNG_VER >= 10400)
+    option=GetImageOption(image_info,"png:chunk-cache-max");
+    if (option != (const char *) NULL)
+      png_set_chunk_cache_max(ping,(png_uint_32) MagickMin(PNG_UINT_32_MAX,
+        StringToLong(option)));
+    else
+      png_set_chunk_cache_max(ping,32767);
+#endif
+
+#if (PNG_LIBPNG_VER >= 10401)
+    option=GetImageOption(image_info,"png:chunk-malloc-max");
+    if (option != (const char *) NULL)
+      png_set_chunk_malloc_max(ping,(png_alloc_size_t) MagickMin(PNG_SIZE_MAX,
+        StringToLong(option)));
+#endif
+  }
 #endif /* PNG_SET_USER_LIMITS_SUPPORTED */
 
   /*
@@ -2522,15 +2541,6 @@ static Image *ReadOnePNGImage(MngInfo *mng_info,
   png_set_read_user_chunk_fn(ping, image, read_user_chunk_callback);
 #endif
 
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-#  if (PNG_LIBPNG_VER >= 10400)
-    /* Limit the size of the chunk storage cache used for sPLT, text,
-     * and unknown chunks.
-     */
-    png_set_chunk_cache_max(ping, 32767);
-#  endif
-#endif
-
 #ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
     /* Disable new libpng-1.5.10 feature */
     png_set_check_for_invalid_index (ping, 0);