[libpng17] Eliminated the PNG_SAFE_LIMITS macro and set default limits in

pnglibconf.dfa, that can be reset by the user at build time or run time.
This provides a more robust defense against DOS and as-yet undiscovered
overflows.
This commit is contained in:
Glenn Randers-Pehrson
2014-12-23 22:13:40 -06:00
parent 38d22ef928
commit eeab1cfefc
6 changed files with 38 additions and 61 deletions

View File

@@ -381,10 +381,11 @@ option IO_STATE
option USER_LIMITS requires READ
# If these settings are *not* set libpng will not limit the size of
# images or the size of data in ancilliary chunks. This does lead to
# security issues if PNG files come from untrusted sources. Settings have the
# following interpretations:
# The default settings given below for the limits mean that libpng will not
# limit the size of images or the size of data in ancilliary chunks beyond the
# specification or implementation limits. This does lead to security issues if
# PNG files come from untrusted sources. Settings have the following
# interpretations:
#
# USER_WIDTH_MAX: maximum width of an image that will be read
# USER_HEIGHT_MAX: maximum height
@@ -393,17 +394,10 @@ option USER_LIMITS requires READ
#
# Only chunks that are variable in number are counted towards the
# USER_CHUNK_CACHE_MAX limit
setting USER_WIDTH_MAX
setting USER_HEIGHT_MAX
setting USER_CHUNK_CACHE_MAX
setting USER_CHUNK_MALLOC_MAX
# To default all these settings to values that are large but probably
# safe turn the SAFE_LIMITS option on; this will cause the value in
# pngpriv.h to be used. Individual values can also be set, simply set
# them in pngusr.dfa with '@#define PNG_setting value' lines.
option SAFE_LIMITS enables USER_LIMITS disabled
= SAFE_LIMITS SAFE_LIMITS
setting USER_WIDTH_MAX default 640000 /* PNG max is 0x7fffffff */
setting USER_HEIGHT_MAX default 640000 /* PNG max is 0x7fffffff */
setting USER_CHUNK_CACHE_MAX default 128 /* Use 0 for unlimited */
setting USER_CHUNK_MALLOC_MAX default 8000000 /* Use 0 for unlimited */
# If this option is enabled APIs to set the above limits at run time are added;
# without this the hardwired (compile time) limits will be used.

View File

@@ -2,7 +2,7 @@
/* pnglibconf.h - library build configuration */
/* Libpng version 1.7.0beta45 - December 23, 2014 */
/* Libpng version 1.7.0beta45 - December 24, 2014 */
/* Copyright (c) 1998-2014 Glenn Randers-Pehrson */
@@ -97,7 +97,6 @@
#define PNG_READ_tIME_SUPPORTED
#define PNG_READ_tRNS_SUPPORTED
#define PNG_READ_zTXt_SUPPORTED
/*#undef PNG_SAFE_LIMITS_SUPPORTED*/
#define PNG_SAVE_INT_32_SUPPORTED
#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_SEQUENTIAL_READ_SUPPORTED
@@ -197,10 +196,14 @@
#define PNG_QUANTIZE_RED_BITS 5
#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1)
#define PNG_TEXT_Z_DEFAULT_STRATEGY 0
#define PNG_USER_CHUNK_CACHE_MAX 128 /* Use 0 for unlimited */
#define PNG_USER_CHUNK_MALLOC_MAX 8000000 /* Use 0 for unlimited */
#define PNG_USER_HEIGHT_MAX 640000 /* PNG max is 0x7fffffff */
#define PNG_USER_WIDTH_MAX 640000 /* PNG max is 0x7fffffff */
#define PNG_WEIGHT_SHIFT 8
#define PNG_ZLIB_VERNUM 0 /* unknown */
#define PNG_ZBUF_SIZE 8192
#define PNG_ZLIB_HEADER <zlib.h>
#define PNG_ZLIB_VERNUM 0 /* unknown */
#define PNG_Z_DEFAULT_COMPRESSION (-1)
#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0
#define PNG_Z_DEFAULT_STRATEGY 1