Update to libpng 1.6.24 (#807)
This commit is contained in:
parent
5bb919a30e
commit
1509ccc51f
|
@ -10,7 +10,7 @@ this sentence.
|
||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, are
|
libpng versions 1.0.7, July 1, 2000 through 1.6.24, August 4, 2016 are
|
||||||
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
derived from libpng-1.0.6, and are distributed according to the same
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
disclaimer and license as libpng-1.0.6 with the following individuals
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
|
@ -32,6 +32,10 @@ and with the following additions to the disclaimer:
|
||||||
risk of satisfactory quality, performance, accuracy, and effort is with
|
risk of satisfactory quality, performance, accuracy, and effort is with
|
||||||
the user.
|
the user.
|
||||||
|
|
||||||
|
Some files in the "contrib" directory and some configure-generated
|
||||||
|
files that are distributed with libpng have other copyright owners and
|
||||||
|
are released under other open source licenses.
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
libpng-0.96, and are distributed according to the same disclaimer and
|
libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
|
@ -55,6 +59,9 @@ Contributing Authors:
|
||||||
Greg Roelofs
|
Greg Roelofs
|
||||||
Tom Tanner
|
Tom Tanner
|
||||||
|
|
||||||
|
Some files in the "scripts" directory have other copyright owners
|
||||||
|
but are released under this license.
|
||||||
|
|
||||||
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
|
@ -95,18 +102,29 @@ appreciated.
|
||||||
|
|
||||||
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
|
|
||||||
A "png_get_copyright" function is available, for convenient use in "about"
|
TRADEMARK:
|
||||||
boxes and the like:
|
|
||||||
|
|
||||||
printf("%s", png_get_copyright(NULL));
|
The name "libpng" has not been registered by the Copyright owner
|
||||||
|
as a trademark in any jurisdiction. However, because libpng has
|
||||||
|
been distributed and maintained world-wide, continually since 1995,
|
||||||
|
the Copyright owner claims "common-law trademark protection" in any
|
||||||
|
jurisdiction where common-law trademark is recognized.
|
||||||
|
|
||||||
Also, the PNG logo (in PNG format, of course) is supplied in the
|
OSI CERTIFICATION:
|
||||||
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
|
||||||
|
|
||||||
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
a certification mark of the Open Source Initiative. OSI has not addressed
|
a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
the additional disclaimers inserted at version 1.0.7.
|
the additional disclaimers inserted at version 1.0.7.
|
||||||
|
|
||||||
|
EXPORT CONTROL:
|
||||||
|
|
||||||
|
The Copyright owner believes that the Export Control Classification
|
||||||
|
Number (ECCN) for libpng is EAR99, which means not subject to export
|
||||||
|
controls or International Traffic in Arms Regulations (ITAR) because
|
||||||
|
it is open source, publicly available software, that does not contain
|
||||||
|
any encryption software. See the EAR, paragraphs 734.3(b)(3) and
|
||||||
|
734.7(b).
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
January 15, 2016
|
August 4, 2016
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef png_libpng_version_1_6_21 Your_png_h_is_not_version_1_6_21;
|
typedef png_libpng_version_1_6_24 Your_png_h_is_not_version_1_6_24;
|
||||||
|
|
||||||
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
||||||
* of the PNG file signature. If the PNG data is embedded into another
|
* of the PNG file signature. If the PNG data is embedded into another
|
||||||
|
@ -775,14 +775,14 @@ png_get_copyright(png_const_structrp png_ptr)
|
||||||
#else
|
#else
|
||||||
# ifdef __STDC__
|
# ifdef __STDC__
|
||||||
return PNG_STRING_NEWLINE \
|
return PNG_STRING_NEWLINE \
|
||||||
"libpng version 1.6.21 - January 15, 2016" PNG_STRING_NEWLINE \
|
"libpng version 1.6.24 - August 4, 2016" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
||||||
PNG_STRING_NEWLINE \
|
PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
||||||
PNG_STRING_NEWLINE;
|
PNG_STRING_NEWLINE;
|
||||||
# else
|
# else
|
||||||
return "libpng version 1.6.21 - January 15, 2016\
|
return "libpng version 1.6.24 - August 4, 2016\
|
||||||
Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
|
Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
|
||||||
Copyright (c) 1996-1997 Andreas Dilger\
|
Copyright (c) 1996-1997 Andreas Dilger\
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
||||||
|
@ -2354,7 +2354,6 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
||||||
|
|
||||||
return 0; /* no match */
|
return 0; /* no match */
|
||||||
}
|
}
|
||||||
#endif /* PNG_sRGB_PROFILE_CHECKS >= 0 */
|
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_icc_set_sRGB(png_const_structrp png_ptr,
|
png_icc_set_sRGB(png_const_structrp png_ptr,
|
||||||
|
@ -2363,12 +2362,11 @@ png_icc_set_sRGB(png_const_structrp png_ptr,
|
||||||
/* Is this profile one of the known ICC sRGB profiles? If it is, just set
|
/* Is this profile one of the known ICC sRGB profiles? If it is, just set
|
||||||
* the sRGB information.
|
* the sRGB information.
|
||||||
*/
|
*/
|
||||||
#if PNG_sRGB_PROFILE_CHECKS >= 0
|
|
||||||
if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
|
if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
|
||||||
#endif
|
|
||||||
(void)png_colorspace_set_sRGB(png_ptr, colorspace,
|
(void)png_colorspace_set_sRGB(png_ptr, colorspace,
|
||||||
(int)/*already checked*/png_get_uint_32(profile+64));
|
(int)/*already checked*/png_get_uint_32(profile+64));
|
||||||
}
|
}
|
||||||
|
#endif /* PNG_sRGB_PROFILE_CHECKS >= 0 */
|
||||||
#endif /* sRGB */
|
#endif /* sRGB */
|
||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
|
@ -2385,7 +2383,7 @@ png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
||||||
profile) != 0)
|
profile) != 0)
|
||||||
{
|
{
|
||||||
# ifdef PNG_sRGB_SUPPORTED
|
# if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
|
||||||
/* If no sRGB support, don't try storing sRGB information */
|
/* If no sRGB support, don't try storing sRGB information */
|
||||||
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
||||||
# endif
|
# endif
|
||||||
|
@ -4092,9 +4090,9 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
||||||
|
|
||||||
/* Remove any existing table; this copes with multiple calls to
|
/* Remove any existing table; this copes with multiple calls to
|
||||||
* png_read_update_info. The warning is because building the gamma tables
|
* png_read_update_info. The warning is because building the gamma tables
|
||||||
* multiple times is a performance hit - it's harmless but the ability to call
|
* multiple times is a performance hit - it's harmless but the ability to
|
||||||
* png_read_update_info() multiple times is new in 1.5.6 so it seems sensible
|
* call png_read_update_info() multiple times is new in 1.5.6 so it seems
|
||||||
* to warn if the app introduces such a hit.
|
* sensible to warn if the app introduces such a hit.
|
||||||
*/
|
*/
|
||||||
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
||||||
{
|
{
|
||||||
|
@ -4105,7 +4103,8 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
||||||
if (bit_depth <= 8)
|
if (bit_depth <= 8)
|
||||||
{
|
{
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
||||||
png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
|
png_ptr->screen_gamma > 0 ?
|
||||||
|
png_reciprocal2(png_ptr->colorspace.gamma,
|
||||||
png_ptr->screen_gamma) : PNG_FP_1);
|
png_ptr->screen_gamma) : PNG_FP_1);
|
||||||
|
|
||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
|
@ -4117,7 +4116,8 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
||||||
png_reciprocal(png_ptr->colorspace.gamma));
|
png_reciprocal(png_ptr->colorspace.gamma));
|
||||||
|
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
|
||||||
png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
|
png_ptr->screen_gamma > 0 ?
|
||||||
|
png_reciprocal(png_ptr->screen_gamma) :
|
||||||
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
||||||
}
|
}
|
||||||
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
||||||
|
@ -4148,8 +4148,8 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
||||||
* pow(iv, gamma).
|
* pow(iv, gamma).
|
||||||
*
|
*
|
||||||
* Thus the gamma table consists of up to 256 256-entry tables. The table
|
* Thus the gamma table consists of up to 256 256-entry tables. The table
|
||||||
* is selected by the (8-gamma_shift) most significant of the low 8 bits of
|
* is selected by the (8-gamma_shift) most significant of the low 8 bits
|
||||||
* the color value then indexed by the upper 8 bits:
|
* of the color value then indexed by the upper 8 bits:
|
||||||
*
|
*
|
||||||
* table[low bits][high 8 bits]
|
* table[low bits][high 8 bits]
|
||||||
*
|
*
|
||||||
|
@ -4182,8 +4182,8 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
||||||
|
|
||||||
/* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
|
/* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
|
||||||
* PNG_COMPOSE). This effectively smashed the background calculation for
|
* PNG_COMPOSE). This effectively smashed the background calculation for
|
||||||
* 16-bit output because the 8-bit table assumes the result will be reduced
|
* 16-bit output because the 8-bit table assumes the result will be
|
||||||
* to 8 bits.
|
* reduced to 8 bits.
|
||||||
*/
|
*/
|
||||||
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
||||||
png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng version 1.6.21, January 15, 2016
|
* libpng version 1.6.24, August 4, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
* Authors and maintainers:
|
* Authors and maintainers:
|
||||||
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
||||||
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
|
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
|
||||||
* libpng versions 0.97, January 1998, through 1.6.21, January 15, 2016:
|
* libpng versions 0.97, January 1998, through 1.6.24, August 4, 2016:
|
||||||
* Glenn Randers-Pehrson.
|
* Glenn Randers-Pehrson.
|
||||||
* See also "Contributing Authors", below.
|
* See also "Contributing Authors", below.
|
||||||
*/
|
*/
|
||||||
|
@ -25,7 +25,11 @@
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
*
|
*
|
||||||
* libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, are
|
* Some files in the "contrib" directory and some configure-generated
|
||||||
|
* files that are distributed with libpng have other copyright owners and
|
||||||
|
* are released under other open source licenses.
|
||||||
|
*
|
||||||
|
* libpng versions 1.0.7, July 1, 2000 through 1.6.24, August 4, 2016 are
|
||||||
* Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
* Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
* derived from libpng-1.0.6, and are distributed according to the same
|
* derived from libpng-1.0.6, and are distributed according to the same
|
||||||
* disclaimer and license as libpng-1.0.6 with the following individuals
|
* disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
|
@ -47,6 +51,10 @@
|
||||||
* risk of satisfactory quality, performance, accuracy, and effort is with
|
* risk of satisfactory quality, performance, accuracy, and effort is with
|
||||||
* the user.
|
* the user.
|
||||||
*
|
*
|
||||||
|
* Some files in the "contrib" directory have other copyright owners and
|
||||||
|
* are released under other open source licenses.
|
||||||
|
*
|
||||||
|
*
|
||||||
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
* libpng-0.96, and are distributed according to the same disclaimer and
|
* libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
|
@ -57,6 +65,9 @@
|
||||||
* Glenn Randers-Pehrson
|
* Glenn Randers-Pehrson
|
||||||
* Willem van Schaik
|
* Willem van Schaik
|
||||||
*
|
*
|
||||||
|
* Some files in the "scripts" directory have different copyright owners
|
||||||
|
* but are also released under this license.
|
||||||
|
*
|
||||||
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||||
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||||
* and are distributed according to the same disclaimer and license as
|
* and are distributed according to the same disclaimer and license as
|
||||||
|
@ -70,6 +81,9 @@
|
||||||
* Greg Roelofs
|
* Greg Roelofs
|
||||||
* Tom Tanner
|
* Tom Tanner
|
||||||
*
|
*
|
||||||
|
* Some files in the "scripts" directory have other copyright owners
|
||||||
|
* but are released under this license.
|
||||||
|
*
|
||||||
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
*
|
*
|
||||||
|
@ -109,6 +123,29 @@
|
||||||
* appreciated.
|
* appreciated.
|
||||||
*
|
*
|
||||||
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
|
*
|
||||||
|
* TRADEMARK:
|
||||||
|
*
|
||||||
|
* The name "libpng" has not been registered by the Copyright owner
|
||||||
|
* as a trademark in any jurisdiction. However, because libpng has
|
||||||
|
* been distributed and maintained world-wide, continually since 1995,
|
||||||
|
* the Copyright owner claims "common-law trademark protection" in any
|
||||||
|
* jurisdiction where common-law trademark is recognized.
|
||||||
|
*
|
||||||
|
* OSI CERTIFICATION:
|
||||||
|
*
|
||||||
|
* Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
|
* a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
|
* the additional disclaimers inserted at version 1.0.7.
|
||||||
|
*
|
||||||
|
* EXPORT CONTROL:
|
||||||
|
*
|
||||||
|
* The Copyright owner believes that the Export Control Classification
|
||||||
|
* Number (ECCN) for libpng is EAR99, which means not subject to export
|
||||||
|
* controls or International Traffic in Arms Regulations (ITAR) because
|
||||||
|
* it is open source, publicly available software, that does not contain
|
||||||
|
* any encryption software. See the EAR, paragraphs 734.3(b)(3) and
|
||||||
|
* 734.7(b).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -121,12 +158,6 @@
|
||||||
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
|
||||||
* a certification mark of the Open Source Initiative. OSI has not addressed
|
|
||||||
* the additional disclaimers inserted at version 1.0.7.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The contributing authors would like to thank all those who helped
|
* The contributing authors would like to thank all those who helped
|
||||||
* with testing, bug fixes, and patience. This wouldn't have been
|
* with testing, bug fixes, and patience. This wouldn't have been
|
||||||
|
@ -182,11 +213,11 @@
|
||||||
* ...
|
* ...
|
||||||
* 1.0.19 10 10019 10.so.0.19[.0]
|
* 1.0.19 10 10019 10.so.0.19[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.2.53 13 10253 12.so.0.53[.0]
|
* 1.2.56 13 10256 12.so.0.56[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.5.23 15 10523 15.so.15.23[.0]
|
* 1.5.27 15 10527 15.so.15.27[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.6.21 16 10621 16.so.16.21[.0]
|
* 1.6.24 16 10624 16.so.16.24[.0]
|
||||||
*
|
*
|
||||||
* Henceforth the source version will match the shared-library major
|
* Henceforth the source version will match the shared-library major
|
||||||
* and minor numbers; the shared-library major version number will be
|
* and minor numbers; the shared-library major version number will be
|
||||||
|
@ -214,13 +245,13 @@
|
||||||
* Y2K compliance in libpng:
|
* Y2K compliance in libpng:
|
||||||
* =========================
|
* =========================
|
||||||
*
|
*
|
||||||
* January 15, 2016
|
* August 4, 2016
|
||||||
*
|
*
|
||||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
* an official declaration.
|
* an official declaration.
|
||||||
*
|
*
|
||||||
* This is your unofficial assurance that libpng from version 0.71 and
|
* This is your unofficial assurance that libpng from version 0.71 and
|
||||||
* upward through 1.6.21 are Y2K compliant. It is my belief that
|
* upward through 1.6.24 are Y2K compliant. It is my belief that
|
||||||
* earlier versions were also Y2K compliant.
|
* earlier versions were also Y2K compliant.
|
||||||
*
|
*
|
||||||
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
|
@ -282,9 +313,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Version information for png.h - this should match the version in png.c */
|
/* Version information for png.h - this should match the version in png.c */
|
||||||
#define PNG_LIBPNG_VER_STRING "1.6.21"
|
#define PNG_LIBPNG_VER_STRING "1.6.24"
|
||||||
#define PNG_HEADER_VERSION_STRING \
|
#define PNG_HEADER_VERSION_STRING " libpng version 1.6.24 - August 4, 2016\n"
|
||||||
" libpng version 1.6.21 - January 15, 2016\n"
|
|
||||||
|
|
||||||
#define PNG_LIBPNG_VER_SONUM 16
|
#define PNG_LIBPNG_VER_SONUM 16
|
||||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||||
|
@ -292,7 +322,7 @@
|
||||||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||||
#define PNG_LIBPNG_VER_MAJOR 1
|
#define PNG_LIBPNG_VER_MAJOR 1
|
||||||
#define PNG_LIBPNG_VER_MINOR 6
|
#define PNG_LIBPNG_VER_MINOR 6
|
||||||
#define PNG_LIBPNG_VER_RELEASE 21
|
#define PNG_LIBPNG_VER_RELEASE 24
|
||||||
|
|
||||||
/* This should match the numeric part of the final component of
|
/* This should match the numeric part of the final component of
|
||||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
||||||
|
@ -323,7 +353,7 @@
|
||||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
||||||
*/
|
*/
|
||||||
#define PNG_LIBPNG_VER 10621 /* 1.6.21 */
|
#define PNG_LIBPNG_VER 10624 /* 1.6.24 */
|
||||||
|
|
||||||
/* Library configuration: these options cannot be changed after
|
/* Library configuration: these options cannot be changed after
|
||||||
* the library has been built.
|
* the library has been built.
|
||||||
|
@ -433,7 +463,7 @@ extern "C" {
|
||||||
/* This triggers a compiler error in png.c, if png.c and png.h
|
/* This triggers a compiler error in png.c, if png.c and png.h
|
||||||
* do not agree upon the version number.
|
* do not agree upon the version number.
|
||||||
*/
|
*/
|
||||||
typedef char* png_libpng_version_1_6_21;
|
typedef char* png_libpng_version_1_6_24;
|
||||||
|
|
||||||
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
||||||
*
|
*
|
||||||
|
@ -734,24 +764,22 @@ typedef png_unknown_chunk * * png_unknown_chunkpp;
|
||||||
* data in the info_struct to be written into the output file. The values
|
* data in the info_struct to be written into the output file. The values
|
||||||
* of the PNG_INFO_<chunk> defines should NOT be changed.
|
* of the PNG_INFO_<chunk> defines should NOT be changed.
|
||||||
*/
|
*/
|
||||||
#define PNG_INFO_gAMA 0x0001
|
#define PNG_INFO_gAMA 0x0001U
|
||||||
#define PNG_INFO_sBIT 0x0002
|
#define PNG_INFO_sBIT 0x0002U
|
||||||
#define PNG_INFO_cHRM 0x0004
|
#define PNG_INFO_cHRM 0x0004U
|
||||||
#define PNG_INFO_PLTE 0x0008
|
#define PNG_INFO_PLTE 0x0008U
|
||||||
#define PNG_INFO_tRNS 0x0010
|
#define PNG_INFO_tRNS 0x0010U
|
||||||
#define PNG_INFO_bKGD 0x0020
|
#define PNG_INFO_bKGD 0x0020U
|
||||||
#define PNG_INFO_hIST 0x0040
|
#define PNG_INFO_hIST 0x0040U
|
||||||
#define PNG_INFO_pHYs 0x0080
|
#define PNG_INFO_pHYs 0x0080U
|
||||||
#define PNG_INFO_oFFs 0x0100
|
#define PNG_INFO_oFFs 0x0100U
|
||||||
#define PNG_INFO_tIME 0x0200
|
#define PNG_INFO_tIME 0x0200U
|
||||||
#define PNG_INFO_pCAL 0x0400
|
#define PNG_INFO_pCAL 0x0400U
|
||||||
#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */
|
#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */
|
||||||
#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
|
#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
|
#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
|
#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */
|
||||||
#if INT_MAX >= 0x8000 /* else this might break */
|
#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is used for the transformation routines, as some of them
|
/* This is used for the transformation routines, as some of them
|
||||||
* change these values for the row. It also should enable using
|
* change these values for the row. It also should enable using
|
||||||
|
@ -1322,7 +1350,7 @@ PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
|
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
|
||||||
#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */
|
#define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */
|
||||||
/* Strip the second byte of information from a 16-bit depth file. */
|
/* Strip the second byte of information from a 16-bit depth file. */
|
||||||
PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr));
|
PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr));
|
||||||
#endif
|
#endif
|
||||||
|
@ -1473,8 +1501,8 @@ PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method,
|
||||||
#define PNG_FILTER_UP 0x20
|
#define PNG_FILTER_UP 0x20
|
||||||
#define PNG_FILTER_AVG 0x40
|
#define PNG_FILTER_AVG 0x40
|
||||||
#define PNG_FILTER_PAETH 0x80
|
#define PNG_FILTER_PAETH 0x80
|
||||||
#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
|
#define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP)
|
||||||
PNG_FILTER_AVG | PNG_FILTER_PAETH)
|
#define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH)
|
||||||
|
|
||||||
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
|
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
|
||||||
* These defines should NOT be changed.
|
* These defines should NOT be changed.
|
||||||
|
@ -1751,21 +1779,21 @@ PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr,
|
||||||
#define PNG_SET_WILL_FREE_DATA 1
|
#define PNG_SET_WILL_FREE_DATA 1
|
||||||
#define PNG_USER_WILL_FREE_DATA 2
|
#define PNG_USER_WILL_FREE_DATA 2
|
||||||
/* Flags for png_ptr->free_me and info_ptr->free_me */
|
/* Flags for png_ptr->free_me and info_ptr->free_me */
|
||||||
#define PNG_FREE_HIST 0x0008
|
#define PNG_FREE_HIST 0x0008U
|
||||||
#define PNG_FREE_ICCP 0x0010
|
#define PNG_FREE_ICCP 0x0010U
|
||||||
#define PNG_FREE_SPLT 0x0020
|
#define PNG_FREE_SPLT 0x0020U
|
||||||
#define PNG_FREE_ROWS 0x0040
|
#define PNG_FREE_ROWS 0x0040U
|
||||||
#define PNG_FREE_PCAL 0x0080
|
#define PNG_FREE_PCAL 0x0080U
|
||||||
#define PNG_FREE_SCAL 0x0100
|
#define PNG_FREE_SCAL 0x0100U
|
||||||
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
# define PNG_FREE_UNKN 0x0200
|
# define PNG_FREE_UNKN 0x0200U
|
||||||
#endif
|
#endif
|
||||||
/* PNG_FREE_LIST 0x0400 removed in 1.6.0 because it is ignored */
|
/* PNG_FREE_LIST 0x0400U removed in 1.6.0 because it is ignored */
|
||||||
#define PNG_FREE_PLTE 0x1000
|
#define PNG_FREE_PLTE 0x1000U
|
||||||
#define PNG_FREE_TRNS 0x2000
|
#define PNG_FREE_TRNS 0x2000U
|
||||||
#define PNG_FREE_TEXT 0x4000
|
#define PNG_FREE_TEXT 0x4000U
|
||||||
#define PNG_FREE_ALL 0x7fff
|
#define PNG_FREE_ALL 0x7fffU
|
||||||
#define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
|
#define PNG_FREE_MUL 0x4220U /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
|
||||||
|
|
||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr,
|
PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr,
|
||||||
|
@ -2271,8 +2299,10 @@ PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
|
||||||
* except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
|
* except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
|
||||||
* be processed by libpng.
|
* be processed by libpng.
|
||||||
*/
|
*/
|
||||||
|
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
||||||
int keep, png_const_bytep chunk_list, int num_chunks));
|
int keep, png_const_bytep chunk_list, int num_chunks));
|
||||||
|
#endif /* HANDLE_AS_UNKNOWN */
|
||||||
|
|
||||||
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
|
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
|
||||||
* the result is therefore true (non-zero) if special handling is required,
|
* the result is therefore true (non-zero) if special handling is required,
|
||||||
|
@ -2280,7 +2310,7 @@ PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
||||||
*/
|
*/
|
||||||
PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
|
PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
|
||||||
png_const_bytep chunk_name));
|
png_const_bytep chunk_name));
|
||||||
#endif
|
#endif /* SET_UNKNOWN_CHUNKS */
|
||||||
|
|
||||||
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
|
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
|
||||||
|
@ -2502,18 +2532,22 @@ PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,
|
||||||
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
|
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
|
||||||
|
|
||||||
# define png_composite(composite, fg, alpha, bg) \
|
# define png_composite(composite, fg, alpha, bg) \
|
||||||
{ png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
|
{ \
|
||||||
|
png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
|
||||||
* (png_uint_16)(alpha) \
|
* (png_uint_16)(alpha) \
|
||||||
+ (png_uint_16)(bg)*(png_uint_16)(255 \
|
+ (png_uint_16)(bg)*(png_uint_16)(255 \
|
||||||
- (png_uint_16)(alpha)) + 128); \
|
- (png_uint_16)(alpha)) + 128); \
|
||||||
(composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); }
|
(composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); \
|
||||||
|
}
|
||||||
|
|
||||||
# define png_composite_16(composite, fg, alpha, bg) \
|
# define png_composite_16(composite, fg, alpha, bg) \
|
||||||
{ png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \
|
{ \
|
||||||
|
png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \
|
||||||
* (png_uint_32)(alpha) \
|
* (png_uint_32)(alpha) \
|
||||||
+ (png_uint_32)(bg)*(65535 \
|
+ (png_uint_32)(bg)*(65535 \
|
||||||
- (png_uint_32)(alpha)) + 32768); \
|
- (png_uint_32)(alpha)) + 32768); \
|
||||||
(composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); }
|
(composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); \
|
||||||
|
}
|
||||||
|
|
||||||
#else /* Standard method using integer division */
|
#else /* Standard method using integer division */
|
||||||
|
|
||||||
|
@ -2889,12 +2923,19 @@ typedef struct
|
||||||
* is the minimum 'row stride', the minimum count of components between each
|
* is the minimum 'row stride', the minimum count of components between each
|
||||||
* row. For a color-mapped image this is the minimum number of bytes in a
|
* row. For a color-mapped image this is the minimum number of bytes in a
|
||||||
* row.
|
* row.
|
||||||
|
*
|
||||||
|
* WARNING: this macro overflows for some images with more than one component
|
||||||
|
* and very large image widths. libpng will refuse to process an image where
|
||||||
|
* this macro would overflow.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
|
#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
|
||||||
(PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride))
|
(PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride))
|
||||||
/* Return the size, in bytes, of an image buffer given a png_image and a row
|
/* Return the size, in bytes, of an image buffer given a png_image and a row
|
||||||
* stride - the number of components to leave space for in each row.
|
* stride - the number of components to leave space for in each row.
|
||||||
|
*
|
||||||
|
* WARNING: this macro overflows a 32-bit integer for some large PNG images,
|
||||||
|
* libpng will refuse to process an image where such an overflow would occur.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_IMAGE_SIZE(image)\
|
#define PNG_IMAGE_SIZE(image)\
|
||||||
|
@ -3015,7 +3056,6 @@ PNG_EXPORT(238, void, png_image_free, (png_imagep image));
|
||||||
#endif /* SIMPLIFIED_READ */
|
#endif /* SIMPLIFIED_READ */
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
#ifdef PNG_STDIO_SUPPORTED
|
|
||||||
/* WRITE APIS
|
/* WRITE APIS
|
||||||
* ----------
|
* ----------
|
||||||
* For write you must initialize a png_image structure to describe the image to
|
* For write you must initialize a png_image structure to describe the image to
|
||||||
|
@ -3032,6 +3072,7 @@ PNG_EXPORT(238, void, png_image_free, (png_imagep image));
|
||||||
* values do not correspond to the colors in sRGB.
|
* values do not correspond to the colors in sRGB.
|
||||||
* colormap_entries: set to the number of entries in the color-map (0 to 256)
|
* colormap_entries: set to the number of entries in the color-map (0 to 256)
|
||||||
*/
|
*/
|
||||||
|
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image,
|
PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image,
|
||||||
const char *file, int convert_to_8bit, const void *buffer,
|
const char *file, int convert_to_8bit, const void *buffer,
|
||||||
png_int_32 row_stride, const void *colormap));
|
png_int_32 row_stride, const void *colormap));
|
||||||
|
@ -3041,8 +3082,9 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
||||||
int convert_to_8_bit, const void *buffer, png_int_32 row_stride,
|
int convert_to_8_bit, const void *buffer, png_int_32 row_stride,
|
||||||
const void *colormap));
|
const void *colormap));
|
||||||
/* Write the image to the given (FILE*). */
|
/* Write the image to the given (FILE*). */
|
||||||
|
#endif /* SIMPLIFIED_WRITE_STDIO */
|
||||||
|
|
||||||
/* With both write APIs if image is in one of the linear formats with 16-bit
|
/* With all write APIs if image is in one of the linear formats with 16-bit
|
||||||
* data then setting convert_to_8_bit will cause the output to be an 8-bit PNG
|
* data then setting convert_to_8_bit will cause the output to be an 8-bit PNG
|
||||||
* gamma encoded according to the sRGB specification, otherwise a 16-bit linear
|
* gamma encoded according to the sRGB specification, otherwise a 16-bit linear
|
||||||
* encoded PNG file is written.
|
* encoded PNG file is written.
|
||||||
|
@ -3054,13 +3096,103 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
||||||
*
|
*
|
||||||
* With all APIs row_stride is handled as in the read APIs - it is the spacing
|
* With all APIs row_stride is handled as in the read APIs - it is the spacing
|
||||||
* from one row to the next in component sized units (1 or 2 bytes) and if
|
* from one row to the next in component sized units (1 or 2 bytes) and if
|
||||||
* negative indicates a bottom-up row layout in the buffer. If row_stride is zero,
|
* negative indicates a bottom-up row layout in the buffer. If row_stride is
|
||||||
* libpng will calculate it for you from the image width and number of channels.
|
* zero, libpng will calculate it for you from the image width and number of
|
||||||
|
* channels.
|
||||||
*
|
*
|
||||||
* Note that the write API does not support interlacing, sub-8-bit pixels, indexed
|
* Note that the write API does not support interlacing, sub-8-bit pixels or
|
||||||
* PNG (color_type 3) or most ancillary chunks.
|
* most ancillary chunks. If you need to write text chunks (e.g. for copyright
|
||||||
|
* notices) you need to use one of the other APIs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
|
||||||
|
png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8_bit,
|
||||||
|
const void *buffer, png_int_32 row_stride, const void *colormap));
|
||||||
|
/* Write the image to the given memory buffer. The function both writes the
|
||||||
|
* whole PNG data stream to *memory and updates *memory_bytes with the count
|
||||||
|
* of bytes written.
|
||||||
|
*
|
||||||
|
* 'memory' may be NULL. In this case *memory_bytes is not read however on
|
||||||
|
* success the number of bytes which would have been written will still be
|
||||||
|
* stored in *memory_bytes. On failure *memory_bytes will contain 0.
|
||||||
|
*
|
||||||
|
* If 'memory' is not NULL it must point to memory[*memory_bytes] of
|
||||||
|
* writeable memory.
|
||||||
|
*
|
||||||
|
* If the function returns success memory[*memory_bytes] (if 'memory' is not
|
||||||
|
* NULL) contains the written PNG data. *memory_bytes will always be less
|
||||||
|
* than or equal to the original value.
|
||||||
|
*
|
||||||
|
* If the function returns false and *memory_bytes was not changed an error
|
||||||
|
* occured during write. If *memory_bytes was changed, or is not 0 if
|
||||||
|
* 'memory' was NULL, the write would have succeeded but for the memory
|
||||||
|
* buffer being too small. *memory_bytes contains the required number of
|
||||||
|
* bytes and will be bigger that the original value.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define png_image_write_get_memory_size(image, size, convert_to_8_bit, buffer,\
|
||||||
|
row_stride, colormap)\
|
||||||
|
png_image_write_to_memory(&(image), 0, &(size), convert_to_8_bit, buffer,\
|
||||||
|
row_stride, colormap)
|
||||||
|
/* Return the amount of memory in 'size' required to compress this image.
|
||||||
|
* The png_image structure 'image' must be filled in as in the above
|
||||||
|
* function and must not be changed before the actual write call, the buffer
|
||||||
|
* and all other parameters must also be identical to that in the final
|
||||||
|
* write call. The 'size' variable need not be initialized.
|
||||||
|
*
|
||||||
|
* NOTE: the macro returns true/false, if false is returned 'size' will be
|
||||||
|
* set to zero and the write failed and probably will fail if tried again.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* You can pre-allocate the buffer by making sure it is of sufficient size
|
||||||
|
* regardless of the amount of compression achieved. The buffer size will
|
||||||
|
* always be bigger than the original image and it will never be filled. The
|
||||||
|
* following macros are provided to assist in allocating the buffer.
|
||||||
|
*/
|
||||||
|
#define PNG_IMAGE_DATA_SIZE(image) (PNG_IMAGE_SIZE(image)+(image).height)
|
||||||
|
/* The number of uncompressed bytes in the PNG byte encoding of the image;
|
||||||
|
* uncompressing the PNG IDAT data will give this number of bytes.
|
||||||
|
*
|
||||||
|
* NOTE: while PNG_IMAGE_SIZE cannot overflow for an image in memory this
|
||||||
|
* macro can because of the extra bytes used in the PNG byte encoding. You
|
||||||
|
* need to avoid this macro if your image size approaches 2^30 in width or
|
||||||
|
* height. The same goes for the remainder of these macros; they all produce
|
||||||
|
* bigger numbers than the actual in-memory image size.
|
||||||
|
*/
|
||||||
|
#ifndef PNG_ZLIB_MAX_SIZE
|
||||||
|
# define PNG_ZLIB_MAX_SIZE(b) ((b)+(((b)+7U)>>3)+(((b)+63U)>>6)+11U)
|
||||||
|
/* An upper bound on the number of compressed bytes given 'b' uncompressed
|
||||||
|
* bytes. This is based on deflateBounds() in zlib; different
|
||||||
|
* implementations of zlib compression may conceivably produce more data so
|
||||||
|
* if your zlib implementation is not zlib itself redefine this macro
|
||||||
|
* appropriately.
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PNG_IMAGE_COMPRESSED_SIZE_MAX(image)\
|
||||||
|
PNG_ZLIB_MAX_SIZE((png_alloc_size_t)PNG_IMAGE_DATA_SIZE(image))
|
||||||
|
/* An upper bound on the size of the data in the PNG IDAT chunks. */
|
||||||
|
|
||||||
|
#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\
|
||||||
|
((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\
|
||||||
|
(((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\
|
||||||
|
12U+3U*(image).colormap_entries/*PLTE data*/+\
|
||||||
|
(((image).format&PNG_FORMAT_FLAG_ALPHA)?\
|
||||||
|
12U/*tRNS*/+(image).colormap_entries:0U):0U)+\
|
||||||
|
12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size))
|
||||||
|
/* A helper for the following macro; if your compiler cannot handle the
|
||||||
|
* following macro use this one with the result of
|
||||||
|
* PNG_IMAGE_COMPRESSED_SIZE_MAX(image) as the second argument (most
|
||||||
|
* compilers should handle this just fine.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_IMAGE_PNG_SIZE_MAX(image)\
|
||||||
|
PNG_IMAGE_PNG_SIZE_MAX_(image, PNG_IMAGE_COMPRESSED_SIZE_MAX(image))
|
||||||
|
/* An upper bound on the total length of the PNG data stream for 'image'.
|
||||||
|
* The result is of type png_alloc_size_t, on 32-bit systems this may
|
||||||
|
* overflow even though PNG_IMAGE_DATA_SIZE does not overflow; the write will
|
||||||
|
* run out of buffer space but return a corrected size which should work.
|
||||||
*/
|
*/
|
||||||
#endif /* STDIO */
|
|
||||||
#endif /* SIMPLIFIED_WRITE */
|
#endif /* SIMPLIFIED_WRITE */
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* END OF SIMPLIFIED API
|
* END OF SIMPLIFIED API
|
||||||
|
@ -3118,7 +3250,7 @@ PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option,
|
||||||
* one to use is one more than this.)
|
* one to use is one more than this.)
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_EXPORT_LAST_ORDINAL
|
#ifdef PNG_EXPORT_LAST_ORDINAL
|
||||||
PNG_EXPORT_LAST_ORDINAL(244);
|
PNG_EXPORT_LAST_ORDINAL(245);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng version 1.6.21, January 15, 2016
|
* libpng version 1.6.24, August 4, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -44,7 +44,7 @@ png_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags &
|
if ((png_ptr->flags &
|
||||||
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0
|
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0)
|
||||||
{
|
{
|
||||||
if (*error_message == PNG_LITERAL_SHARP)
|
if (*error_message == PNG_LITERAL_SHARP)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/* libpng 1.6.21 STANDARD API DEFINITION */
|
/* libpng 1.6.24 STANDARD API DEFINITION */
|
||||||
|
|
||||||
/* pnglibconf.h - library build configuration */
|
/* pnglibconf.h - library build configuration */
|
||||||
|
|
||||||
/* Libpng version 1.6.21 - January 15, 2016 */
|
/* Libpng version 1.6.24 - August 4, 2016 */
|
||||||
|
|
||||||
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
||||||
|
|
||||||
|
@ -109,6 +109,7 @@
|
||||||
#define PNG_SIMPLIFIED_READ_SUPPORTED
|
#define PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
|
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
|
||||||
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
|
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
#define PNG_STDIO_SUPPORTED
|
#define PNG_STDIO_SUPPORTED
|
||||||
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014,2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -210,13 +210,15 @@ png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
(png_ptr->mode & PNG_HAVE_PLTE) == 0)
|
(png_ptr->mode & PNG_HAVE_PLTE) == 0)
|
||||||
png_error(png_ptr, "Missing PLTE before IDAT");
|
png_error(png_ptr, "Missing PLTE before IDAT");
|
||||||
|
|
||||||
png_ptr->mode |= PNG_HAVE_IDAT;
|
|
||||||
png_ptr->process_mode = PNG_READ_IDAT_MODE;
|
png_ptr->process_mode = PNG_READ_IDAT_MODE;
|
||||||
|
|
||||||
|
if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
|
||||||
if ((png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) == 0)
|
if ((png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) == 0)
|
||||||
if (png_ptr->push_length == 0)
|
if (png_ptr->push_length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
png_ptr->mode |= PNG_HAVE_IDAT;
|
||||||
|
|
||||||
if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
|
if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
|
||||||
png_benign_error(png_ptr, "Too many IDATs found");
|
png_benign_error(png_ptr, "Too many IDATs found");
|
||||||
}
|
}
|
||||||
|
@ -499,7 +501,10 @@ png_push_save_buffer(png_structrp png_ptr)
|
||||||
png_error(png_ptr, "Insufficient memory for save_buffer");
|
png_error(png_ptr, "Insufficient memory for save_buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (old_buffer)
|
||||||
memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
||||||
|
else if (png_ptr->save_buffer_size)
|
||||||
|
png_error(png_ptr, "save_buffer error");
|
||||||
png_free(png_ptr, old_buffer);
|
png_free(png_ptr, old_buffer);
|
||||||
png_ptr->save_buffer_max = new_max;
|
png_ptr->save_buffer_max = new_max;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngpriv.h - private declarations for use inside libpng
|
/* pngpriv.h - private declarations for use inside libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.21 [January 15, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -1174,6 +1174,7 @@ PNG_INTERNAL_FUNCTION(void,png_do_write_interlace,(png_row_infop row_info,
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
|
||||||
|
|
||||||
|
#if PNG_ARM_NEON_OPT > 0
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
|
||||||
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
|
||||||
|
@ -1188,6 +1189,7 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,(png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Choose the best filter to use and filter the row data */
|
/* Choose the best filter to use and filter the row data */
|
||||||
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
||||||
|
@ -1913,9 +1915,11 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
|
||||||
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
||||||
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
||||||
*/
|
*/
|
||||||
|
# if PNG_ARM_NEON_OPT > 0
|
||||||
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
||||||
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
||||||
# endif
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
||||||
png_const_charp key, png_bytep new_key), PNG_EMPTY);
|
png_const_charp key, png_bytep new_key), PNG_EMPTY);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -127,7 +127,10 @@ png_read_info(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
|
else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
|
||||||
|
{
|
||||||
|
png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
|
||||||
png_ptr->mode |= PNG_AFTER_IDAT;
|
png_ptr->mode |= PNG_AFTER_IDAT;
|
||||||
|
}
|
||||||
|
|
||||||
/* This should be a binary subdivision search or a hash for
|
/* This should be a binary subdivision search or a hash for
|
||||||
* matching the chunk name rather than a linear search.
|
* matching the chunk name rather than a linear search.
|
||||||
|
@ -785,6 +788,9 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
png_uint_32 length = png_read_chunk_header(png_ptr);
|
png_uint_32 length = png_read_chunk_header(png_ptr);
|
||||||
png_uint_32 chunk_name = png_ptr->chunk_name;
|
png_uint_32 chunk_name = png_ptr->chunk_name;
|
||||||
|
|
||||||
|
if (chunk_name != png_IDAT)
|
||||||
|
png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
|
||||||
|
|
||||||
if (chunk_name == png_IEND)
|
if (chunk_name == png_IEND)
|
||||||
png_handle_IEND(png_ptr, info_ptr, length);
|
png_handle_IEND(png_ptr, info_ptr, length);
|
||||||
|
|
||||||
|
@ -799,9 +805,9 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
{
|
{
|
||||||
if (chunk_name == png_IDAT)
|
if (chunk_name == png_IDAT)
|
||||||
{
|
{
|
||||||
if ((length > 0) ||
|
if ((length > 0 && !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
|
||||||
(png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
|| (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
||||||
png_benign_error(png_ptr, "Too many IDATs found");
|
png_benign_error(png_ptr, ".Too many IDATs found");
|
||||||
}
|
}
|
||||||
png_handle_unknown(png_ptr, info_ptr, length, keep);
|
png_handle_unknown(png_ptr, info_ptr, length, keep);
|
||||||
if (chunk_name == png_PLTE)
|
if (chunk_name == png_PLTE)
|
||||||
|
@ -812,10 +818,14 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
else if (chunk_name == png_IDAT)
|
else if (chunk_name == png_IDAT)
|
||||||
{
|
{
|
||||||
/* Zero length IDATs are legal after the last IDAT has been
|
/* Zero length IDATs are legal after the last IDAT has been
|
||||||
* read, but not after other chunks have been read.
|
* read, but not after other chunks have been read. 1.6 does not
|
||||||
|
* always read all the deflate data; specifically it cannot be relied
|
||||||
|
* upon to read the Adler32 at the end. If it doesn't ignore IDAT
|
||||||
|
* chunks which are longer than zero as well:
|
||||||
*/
|
*/
|
||||||
if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
if ((length > 0 && !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
|
||||||
png_benign_error(png_ptr, "Too many IDATs found");
|
|| (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
|
||||||
|
png_benign_error(png_ptr, "..Too many IDATs found");
|
||||||
|
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
}
|
}
|
||||||
|
@ -1020,8 +1030,7 @@ png_set_read_status_fn(png_structrp png_ptr, png_read_status_ptr read_row_fn)
|
||||||
#ifdef PNG_INFO_IMAGE_SUPPORTED
|
#ifdef PNG_INFO_IMAGE_SUPPORTED
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_read_png(png_structrp png_ptr, png_inforp info_ptr,
|
png_read_png(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
int transforms,
|
int transforms, voidp params)
|
||||||
voidp params)
|
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -2095,7 +2104,7 @@ png_image_read_colormap(png_voidp argument)
|
||||||
|
|
||||||
else if (display->background == NULL /* no way to remove it */)
|
else if (display->background == NULL /* no way to remove it */)
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"a background color must be supplied to remove alpha/transparency");
|
"background color must be supplied to remove alpha/transparency");
|
||||||
|
|
||||||
/* Get a copy of the background color (this avoids repeating the checks
|
/* Get a copy of the background color (this avoids repeating the checks
|
||||||
* below.) The encoding is 8-bit sRGB or 16-bit linear, depending on the
|
* below.) The encoding is 8-bit sRGB or 16-bit linear, depending on the
|
||||||
|
@ -2420,8 +2429,8 @@ png_image_read_colormap(png_voidp argument)
|
||||||
background_index = i;
|
background_index = i;
|
||||||
png_create_colormap_entry(display, i++, back_r, back_g, back_b,
|
png_create_colormap_entry(display, i++, back_r, back_g, back_b,
|
||||||
#ifdef __COVERITY__
|
#ifdef __COVERITY__
|
||||||
/* Coverity claims that output_encoding cannot be 2 (P_LINEAR)
|
/* Coverity claims that output_encoding
|
||||||
* here.
|
* cannot be 2 (P_LINEAR) here.
|
||||||
*/ 255U,
|
*/ 255U,
|
||||||
#else
|
#else
|
||||||
output_encoding == P_LINEAR ? 65535U : 255U,
|
output_encoding == P_LINEAR ? 65535U : 255U,
|
||||||
|
@ -2809,12 +2818,12 @@ png_image_read_colormap(png_voidp argument)
|
||||||
* on the sRGB color in 'back'.
|
* on the sRGB color in 'back'.
|
||||||
*/
|
*/
|
||||||
png_create_colormap_entry(display, i,
|
png_create_colormap_entry(display, i,
|
||||||
png_colormap_compose(display, colormap[i].red, P_FILE,
|
png_colormap_compose(display, colormap[i].red,
|
||||||
trans[i], back_r, output_encoding),
|
P_FILE, trans[i], back_r, output_encoding),
|
||||||
png_colormap_compose(display, colormap[i].green, P_FILE,
|
png_colormap_compose(display, colormap[i].green,
|
||||||
trans[i], back_g, output_encoding),
|
P_FILE, trans[i], back_g, output_encoding),
|
||||||
png_colormap_compose(display, colormap[i].blue, P_FILE,
|
png_colormap_compose(display, colormap[i].blue,
|
||||||
trans[i], back_b, output_encoding),
|
P_FILE, trans[i], back_b, output_encoding),
|
||||||
output_encoding == P_LINEAR ? trans[i] * 257U :
|
output_encoding == P_LINEAR ? trans[i] * 257U :
|
||||||
trans[i],
|
trans[i],
|
||||||
output_encoding);
|
output_encoding);
|
||||||
|
@ -3423,8 +3432,7 @@ png_image_read_background(png_voidp argument)
|
||||||
|
|
||||||
for (pass = 0; pass < passes; ++pass)
|
for (pass = 0; pass < passes; ++pass)
|
||||||
{
|
{
|
||||||
png_bytep row = png_voidcast(png_bytep,
|
png_bytep row = png_voidcast(png_bytep, display->first_row);
|
||||||
display->first_row);
|
|
||||||
unsigned int startx, stepx, stepy;
|
unsigned int startx, stepx, stepy;
|
||||||
png_uint_32 y;
|
png_uint_32 y;
|
||||||
|
|
||||||
|
@ -4070,11 +4078,26 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
||||||
void *buffer, png_int_32 row_stride, void *colormap)
|
void *buffer, png_int_32 row_stride, void *colormap)
|
||||||
{
|
{
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
|
{
|
||||||
|
/* Check for row_stride overflow. This check is not performed on the
|
||||||
|
* original PNG format because it may not occur in the output PNG format
|
||||||
|
* and libpng deals with the issues of reading the original.
|
||||||
|
*/
|
||||||
|
const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
|
||||||
|
|
||||||
|
/* The following checks just the 'row_stride' calculation to ensure it
|
||||||
|
* fits in a signed 32-bit value. Because channels/components can be
|
||||||
|
* either 1 or 2 bytes in size the length of a row can still overflow 32
|
||||||
|
* bits; this is just to verify that the 'row_stride' argument can be
|
||||||
|
* represented.
|
||||||
|
*/
|
||||||
|
if (image->width <= 0x7FFFFFFFU/channels) /* no overflow */
|
||||||
{
|
{
|
||||||
png_uint_32 check;
|
png_uint_32 check;
|
||||||
|
const png_uint_32 png_row_stride = image->width * channels;
|
||||||
|
|
||||||
if (row_stride == 0)
|
if (row_stride == 0)
|
||||||
row_stride = PNG_IMAGE_ROW_STRIDE(*image);
|
row_stride = (png_int_32)/*SAFE*/png_row_stride;
|
||||||
|
|
||||||
if (row_stride < 0)
|
if (row_stride < 0)
|
||||||
check = -row_stride;
|
check = -row_stride;
|
||||||
|
@ -4082,8 +4105,30 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
||||||
else
|
else
|
||||||
check = row_stride;
|
check = row_stride;
|
||||||
|
|
||||||
if (image->opaque != NULL && buffer != NULL &&
|
/* This verifies 'check', the absolute value of the actual stride
|
||||||
check >= PNG_IMAGE_ROW_STRIDE(*image))
|
* passed in and detects overflow in the application calculation (i.e.
|
||||||
|
* if the app did actually pass in a non-zero 'row_stride'.
|
||||||
|
*/
|
||||||
|
if (image->opaque != NULL && buffer != NULL && check >= png_row_stride)
|
||||||
|
{
|
||||||
|
/* Now check for overflow of the image buffer calculation; this
|
||||||
|
* limits the whole image size to 32 bits for API compatibility with
|
||||||
|
* the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
|
||||||
|
*
|
||||||
|
* The PNG_IMAGE_BUFFER_SIZE macro is:
|
||||||
|
*
|
||||||
|
* (PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)*height*(row_stride))
|
||||||
|
*
|
||||||
|
* And the component size is always 1 or 2, so make sure that the
|
||||||
|
* number of *bytes* that the application is saying are available
|
||||||
|
* does actually fit into a 32-bit number.
|
||||||
|
*
|
||||||
|
* NOTE: this will be changed in 1.7 because PNG_IMAGE_BUFFER_SIZE
|
||||||
|
* will be changed to use png_alloc_size_t; bigger images can be
|
||||||
|
* accomodated on 64-bit systems.
|
||||||
|
*/
|
||||||
|
if (image->height <=
|
||||||
|
0xFFFFFFFFU/PNG_IMAGE_PIXEL_COMPONENT_SIZE(image->format)/check)
|
||||||
{
|
{
|
||||||
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
|
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
|
||||||
(image->colormap_entries > 0 && colormap != NULL))
|
(image->colormap_entries > 0 && colormap != NULL))
|
||||||
|
@ -4099,17 +4144,20 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
||||||
display.background = background;
|
display.background = background;
|
||||||
display.local_row = NULL;
|
display.local_row = NULL;
|
||||||
|
|
||||||
/* Choose the correct 'end' routine; for the color-map case all the
|
/* Choose the correct 'end' routine; for the color-map case
|
||||||
* setup has already been done.
|
* all the setup has already been done.
|
||||||
*/
|
*/
|
||||||
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
||||||
result =
|
result =
|
||||||
png_safe_execute(image, png_image_read_colormap, &display) &&
|
png_safe_execute(image,
|
||||||
png_safe_execute(image, png_image_read_colormapped, &display);
|
png_image_read_colormap, &display) &&
|
||||||
|
png_safe_execute(image,
|
||||||
|
png_image_read_colormapped, &display);
|
||||||
|
|
||||||
else
|
else
|
||||||
result =
|
result =
|
||||||
png_safe_execute(image, png_image_read_direct, &display);
|
png_safe_execute(image,
|
||||||
|
png_image_read_direct, &display);
|
||||||
|
|
||||||
png_image_free(image);
|
png_image_free(image);
|
||||||
return result;
|
return result;
|
||||||
|
@ -4120,11 +4168,21 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
||||||
"png_image_finish_read[color-map]: no color-map");
|
"png_image_finish_read[color-map]: no color-map");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return png_image_error(image,
|
||||||
|
"png_image_finish_read: image too large");
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: invalid argument");
|
"png_image_finish_read: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return png_image_error(image,
|
||||||
|
"png_image_finish_read: row_stride too large");
|
||||||
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: damaged PNG_IMAGE_VERSION");
|
"png_image_finish_read: damaged PNG_IMAGE_VERSION");
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -289,9 +289,12 @@ png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
|
||||||
* is expected to be 1 or greater, but this range test allows for some
|
* is expected to be 1 or greater, but this range test allows for some
|
||||||
* viewing correction values. The intent is to weed out users of this API
|
* viewing correction values. The intent is to weed out users of this API
|
||||||
* who use the inverse of the gamma value accidentally! Since some of these
|
* who use the inverse of the gamma value accidentally! Since some of these
|
||||||
* values are reasonable this may have to be changed.
|
* values are reasonable this may have to be changed:
|
||||||
|
*
|
||||||
|
* 1.6.x: changed from 0.07..3 to 0.01..100 (to accomodate the optimal 16-bit
|
||||||
|
* gamma of 36, and its reciprocal.)
|
||||||
*/
|
*/
|
||||||
if (output_gamma < 70000 || output_gamma > 300000)
|
if (output_gamma < 1000 || output_gamma > 10000000)
|
||||||
png_error(png_ptr, "output gamma out of expected range");
|
png_error(png_ptr, "output gamma out of expected range");
|
||||||
|
|
||||||
/* The default file gamma is the inverse of the output gamma; the output
|
/* The default file gamma is the inverse of the output gamma; the output
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngrutil.c - utilities to read a PNG file
|
/* pngrutil.c - utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.20 [December 3, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -590,6 +590,7 @@ png_inflate(png_structrp png_ptr, png_uint_32 owner, int finish,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_zTXt_SUPPORTED) || defined (PNG_READ_iTXt_SUPPORTED)
|
||||||
/*
|
/*
|
||||||
* Decompress trailing data in a chunk. The assumption is that read_buffer
|
* Decompress trailing data in a chunk. The assumption is that read_buffer
|
||||||
* points at an allocated area holding the contents of a chunk with a
|
* points at an allocated area holding the contents of a chunk with a
|
||||||
|
@ -754,6 +755,7 @@ png_decompress_chunk(png_structrp png_ptr,
|
||||||
return Z_MEM_ERROR;
|
return Z_MEM_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* READ_zTXt || READ_iTXt */
|
||||||
#endif /* READ_COMPRESSED_TEXT */
|
#endif /* READ_COMPRESSED_TEXT */
|
||||||
|
|
||||||
#ifdef PNG_READ_iCCP_SUPPORTED
|
#ifdef PNG_READ_iCCP_SUPPORTED
|
||||||
|
@ -802,8 +804,8 @@ png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
|
||||||
* the available output is produced; this allows reading of truncated
|
* the available output is produced; this allows reading of truncated
|
||||||
* streams.
|
* streams.
|
||||||
*/
|
*/
|
||||||
ret = PNG_INFLATE(png_ptr,
|
ret = PNG_INFLATE(png_ptr, *chunk_bytes > 0 ?
|
||||||
*chunk_bytes > 0 ? Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
||||||
}
|
}
|
||||||
while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
|
while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
|
||||||
|
|
||||||
|
@ -1512,7 +1514,7 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
finished = 1;
|
finished = 1;
|
||||||
|
|
||||||
# ifdef PNG_sRGB_SUPPORTED
|
# if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
|
||||||
/* Check for a match against sRGB */
|
/* Check for a match against sRGB */
|
||||||
png_icc_set_sRGB(png_ptr,
|
png_icc_set_sRGB(png_ptr,
|
||||||
&png_ptr->colorspace, profile,
|
&png_ptr->colorspace, profile,
|
||||||
|
@ -3418,8 +3420,8 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
|
||||||
/* Everything is aligned for png_uint_16 copies, but try for
|
/* Everything is aligned for png_uint_16 copies, but try for
|
||||||
* png_uint_32 first.
|
* png_uint_32 first.
|
||||||
*/
|
*/
|
||||||
if (png_isaligned(dp, png_uint_32) != 0 &&
|
if (png_isaligned(dp, png_uint_32) &&
|
||||||
png_isaligned(sp, png_uint_32) != 0 &&
|
png_isaligned(sp, png_uint_32) &&
|
||||||
bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
|
bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
|
||||||
bytes_to_jump % (sizeof (png_uint_32)) == 0)
|
bytes_to_jump % (sizeof (png_uint_32)) == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.21 [January 15, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -952,13 +952,15 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
|
|
||||||
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
|
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
|
||||||
|
|
||||||
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
|
|
||||||
png_ptr->trans_alpha = info_ptr->trans_alpha = png_voidcast(png_bytep,
|
|
||||||
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
|
|
||||||
|
|
||||||
if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
|
if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
|
||||||
|
{
|
||||||
|
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
|
||||||
|
info_ptr->trans_alpha = png_voidcast(png_bytep,
|
||||||
|
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
|
||||||
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
|
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
|
||||||
}
|
}
|
||||||
|
png_ptr->trans_alpha = info_ptr->trans_alpha;
|
||||||
|
}
|
||||||
|
|
||||||
if (trans_color != NULL)
|
if (trans_color != NULL)
|
||||||
{
|
{
|
||||||
|
@ -1660,7 +1662,9 @@ png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
|
||||||
png_uint_32 /* PRIVATE */
|
png_uint_32 /* PRIVATE */
|
||||||
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
png_const_charp orig_key = key;
|
png_const_charp orig_key = key;
|
||||||
|
#endif
|
||||||
png_uint_32 key_len = 0;
|
png_uint_32 key_len = 0;
|
||||||
int bad_character = 0;
|
int bad_character = 0;
|
||||||
int space = 1;
|
int space = 1;
|
||||||
|
@ -1723,7 +1727,9 @@ png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
||||||
|
|
||||||
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
||||||
}
|
}
|
||||||
#endif /* WARNINGS */
|
#else /* !WARNINGS */
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
|
#endif /* !WARNINGS */
|
||||||
|
|
||||||
return key_len;
|
return key_len;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngstruct.h - header file for PNG reference library
|
/* pngstruct.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -249,7 +249,7 @@ struct png_struct_def
|
||||||
png_byte filter; /* file filter type (always 0) */
|
png_byte filter; /* file filter type (always 0) */
|
||||||
png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
||||||
png_byte pass; /* current interlace pass (0 - 6) */
|
png_byte pass; /* current interlace pass (0 - 6) */
|
||||||
png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */
|
png_byte do_filter; /* row filter flags (see PNG_FILTER_ in png.h ) */
|
||||||
png_byte color_type; /* color type of file */
|
png_byte color_type; /* color type of file */
|
||||||
png_byte bit_depth; /* bit depth of file */
|
png_byte bit_depth; /* bit depth of file */
|
||||||
png_byte usr_bit_depth; /* bit depth of users row: write only */
|
png_byte usr_bit_depth; /* bit depth of users row: write only */
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -172,7 +172,8 @@ png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
|
||||||
* size!
|
* size!
|
||||||
*/
|
*/
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"png_set_filler is invalid for low bit depth gray output");
|
"png_set_filler is invalid for"
|
||||||
|
" low bit depth gray output");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014,2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -12,9 +12,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
#if defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
|
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
#endif
|
#endif /* SIMPLIFIED_WRITE_STDIO */
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
|
|
||||||
|
@ -1452,7 +1452,6 @@ png_write_png(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
|
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
# ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
|
|
||||||
/* Initialize the write structure - general purpose utility. */
|
/* Initialize the write structure - general purpose utility. */
|
||||||
static int
|
static int
|
||||||
png_image_write_init(png_imagep image)
|
png_image_write_init(png_imagep image)
|
||||||
|
@ -1504,6 +1503,10 @@ typedef struct
|
||||||
png_const_voidp first_row;
|
png_const_voidp first_row;
|
||||||
ptrdiff_t row_bytes;
|
ptrdiff_t row_bytes;
|
||||||
png_voidp local_row;
|
png_voidp local_row;
|
||||||
|
/* Byte count for memory writing */
|
||||||
|
png_bytep memory;
|
||||||
|
png_alloc_size_t memory_bytes; /* not used for STDIO */
|
||||||
|
png_alloc_size_t output_bytes; /* running total */
|
||||||
} png_image_write_control;
|
} png_image_write_control;
|
||||||
|
|
||||||
/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
|
/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
|
||||||
|
@ -1931,9 +1934,43 @@ png_image_write_main(png_voidp argument)
|
||||||
png_set_benign_errors(png_ptr, 0/*error*/);
|
png_set_benign_errors(png_ptr, 0/*error*/);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Default the 'row_stride' parameter if required. */
|
/* Default the 'row_stride' parameter if required, also check the row stride
|
||||||
|
* and total image size to ensure that they are within the system limits.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
|
||||||
|
|
||||||
|
if (image->width <= 0x7FFFFFFFU/channels) /* no overflow */
|
||||||
|
{
|
||||||
|
png_uint_32 check;
|
||||||
|
const png_uint_32 png_row_stride = image->width * channels;
|
||||||
|
|
||||||
if (display->row_stride == 0)
|
if (display->row_stride == 0)
|
||||||
display->row_stride = PNG_IMAGE_ROW_STRIDE(*image);
|
display->row_stride = (png_int_32)/*SAFE*/png_row_stride;
|
||||||
|
|
||||||
|
if (display->row_stride < 0)
|
||||||
|
check = -display->row_stride;
|
||||||
|
|
||||||
|
else
|
||||||
|
check = display->row_stride;
|
||||||
|
|
||||||
|
if (check >= png_row_stride)
|
||||||
|
{
|
||||||
|
/* Now check for overflow of the image buffer calculation; this
|
||||||
|
* limits the whole image size to 32 bits for API compatibility with
|
||||||
|
* the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
|
||||||
|
*/
|
||||||
|
if (image->height > 0xFFFFFFFF/png_row_stride)
|
||||||
|
png_error(image->opaque->png_ptr, "memory image too large");
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
png_error(image->opaque->png_ptr, "supplied row stride too small");
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
png_error(image->opaque->png_ptr, "image row stride too large");
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the required transforms then write the rows in the correct order. */
|
/* Set the required transforms then write the rows in the correct order. */
|
||||||
if ((format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
if ((format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
||||||
|
@ -2110,6 +2147,122 @@ png_image_write_main(png_voidp argument)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void (PNGCBAPI
|
||||||
|
image_memory_write)(png_structp png_ptr, png_bytep/*const*/ data,
|
||||||
|
png_size_t size)
|
||||||
|
{
|
||||||
|
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
||||||
|
png_ptr->io_ptr/*backdoor: png_get_io_ptr(png_ptr)*/);
|
||||||
|
const png_alloc_size_t ob = display->output_bytes;
|
||||||
|
|
||||||
|
/* Check for overflow; this should never happen: */
|
||||||
|
if (size <= ((png_alloc_size_t)-1) - ob)
|
||||||
|
{
|
||||||
|
/* I don't think libpng ever does this, but just in case: */
|
||||||
|
if (size > 0)
|
||||||
|
{
|
||||||
|
if (display->memory_bytes >= ob+size) /* writing */
|
||||||
|
memcpy(display->memory+ob, data, size);
|
||||||
|
|
||||||
|
/* Always update the size: */
|
||||||
|
display->output_bytes = ob+size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
png_error(png_ptr, "png_image_write_to_memory: PNG too big");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void (PNGCBAPI
|
||||||
|
image_memory_flush)(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
png_image_write_memory(png_voidp argument)
|
||||||
|
{
|
||||||
|
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
||||||
|
argument);
|
||||||
|
|
||||||
|
/* The rest of the memory-specific init and write_main in an error protected
|
||||||
|
* environment. This case needs to use callbacks for the write operations
|
||||||
|
* since libpng has no built in support for writing to memory.
|
||||||
|
*/
|
||||||
|
png_set_write_fn(display->image->opaque->png_ptr, display/*io_ptr*/,
|
||||||
|
image_memory_write, image_memory_flush);
|
||||||
|
|
||||||
|
return png_image_write_main(display);
|
||||||
|
}
|
||||||
|
|
||||||
|
int PNGAPI
|
||||||
|
png_image_write_to_memory(png_imagep image, void *memory,
|
||||||
|
png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8bit,
|
||||||
|
const void *buffer, png_int_32 row_stride, const void *colormap)
|
||||||
|
{
|
||||||
|
/* Write the image to the given buffer, or count the bytes if it is NULL */
|
||||||
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
|
{
|
||||||
|
if (memory_bytes != NULL && buffer != NULL)
|
||||||
|
{
|
||||||
|
/* This is to give the caller an easier error detection in the NULL
|
||||||
|
* case and guard against uninitialized variable problems:
|
||||||
|
*/
|
||||||
|
if (memory == NULL)
|
||||||
|
*memory_bytes = 0;
|
||||||
|
|
||||||
|
if (png_image_write_init(image) != 0)
|
||||||
|
{
|
||||||
|
png_image_write_control display;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
memset(&display, 0, (sizeof display));
|
||||||
|
display.image = image;
|
||||||
|
display.buffer = buffer;
|
||||||
|
display.row_stride = row_stride;
|
||||||
|
display.colormap = colormap;
|
||||||
|
display.convert_to_8bit = convert_to_8bit;
|
||||||
|
display.memory = png_voidcast(png_bytep, memory);
|
||||||
|
display.memory_bytes = *memory_bytes;
|
||||||
|
display.output_bytes = 0;
|
||||||
|
|
||||||
|
result = png_safe_execute(image, png_image_write_memory, &display);
|
||||||
|
png_image_free(image);
|
||||||
|
|
||||||
|
/* write_memory returns true even if we ran out of buffer. */
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
/* On out-of-buffer this function returns '0' but still updates
|
||||||
|
* memory_bytes:
|
||||||
|
*/
|
||||||
|
if (memory != NULL && display.output_bytes > *memory_bytes)
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
*memory_bytes = display.output_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return png_image_error(image,
|
||||||
|
"png_image_write_to_memory: invalid argument");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (image != NULL)
|
||||||
|
return png_image_error(image,
|
||||||
|
"png_image_write_to_memory: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
int PNGAPI
|
int PNGAPI
|
||||||
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
||||||
const void *buffer, png_int_32 row_stride, const void *colormap)
|
const void *buffer, png_int_32 row_stride, const void *colormap)
|
||||||
|
@ -2117,7 +2270,7 @@ png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
||||||
/* Write the image to the given (FILE*). */
|
/* Write the image to the given (FILE*). */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
{
|
||||||
if (file != NULL)
|
if (file != NULL && buffer != NULL)
|
||||||
{
|
{
|
||||||
if (png_image_write_init(image) != 0)
|
if (png_image_write_init(image) != 0)
|
||||||
{
|
{
|
||||||
|
@ -2167,7 +2320,7 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
||||||
/* Write the image to the named file. */
|
/* Write the image to the named file. */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
{
|
||||||
if (file_name != NULL)
|
if (file_name != NULL && buffer != NULL)
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(file_name, "wb");
|
FILE *fp = fopen(file_name, "wb");
|
||||||
|
|
||||||
|
@ -2225,6 +2378,6 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
# endif /* STDIO */
|
#endif /* SIMPLIFIED_WRITE_STDIO */
|
||||||
#endif /* SIMPLIFIED_WRITE */
|
#endif /* SIMPLIFIED_WRITE */
|
||||||
#endif /* WRITE */
|
#endif /* WRITE */
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.21 [January 15, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
@ -23,10 +23,10 @@
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_save_uint_32(png_bytep buf, png_uint_32 i)
|
png_save_uint_32(png_bytep buf, png_uint_32 i)
|
||||||
{
|
{
|
||||||
buf[0] = (png_byte)(i >> 24);
|
buf[0] = (png_byte)((i >> 24) & 0xffU);
|
||||||
buf[1] = (png_byte)(i >> 16);
|
buf[1] = (png_byte)((i >> 16) & 0xffU);
|
||||||
buf[2] = (png_byte)(i >> 8);
|
buf[2] = (png_byte)((i >> 8) & 0xffU);
|
||||||
buf[3] = (png_byte)(i );
|
buf[3] = (png_byte)( i & 0xffU);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Place a 16-bit number into a buffer in PNG byte order.
|
/* Place a 16-bit number into a buffer in PNG byte order.
|
||||||
|
@ -36,8 +36,8 @@ png_save_uint_32(png_bytep buf, png_uint_32 i)
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_save_uint_16(png_bytep buf, unsigned int i)
|
png_save_uint_16(png_bytep buf, unsigned int i)
|
||||||
{
|
{
|
||||||
buf[0] = (png_byte)(i >> 8);
|
buf[0] = (png_byte)((i >> 8) & 0xffU);
|
||||||
buf[1] = (png_byte)(i );
|
buf[1] = (png_byte)( i & 0xffU);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1441,7 +1441,8 @@ png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8");
|
"Ignoring attempt to write 16-bit bKGD chunk "
|
||||||
|
"when bit_depth is 8");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2262,14 +2263,22 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
i++, rp++, dp++)
|
i++, rp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = *rp;
|
v = *dp = *rp;
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
||||||
i++, rp++, lp++, dp++)
|
i++, rp++, lp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
|
@ -2278,6 +2287,28 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_sub_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, lp;
|
||||||
|
png_size_t i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_SUB;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1; i < bpp;
|
||||||
|
i++, rp++, dp++)
|
||||||
|
{
|
||||||
|
*dp = *rp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
||||||
|
i++, rp++, lp++, dp++)
|
||||||
|
{
|
||||||
|
*dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
||||||
const png_size_t lmins)
|
const png_size_t lmins)
|
||||||
|
@ -2294,7 +2325,11 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
||||||
i++, rp++, pp++, dp++)
|
i++, rp++, pp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
v = *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
|
@ -2302,6 +2337,21 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_up_row_only(png_structrp png_ptr, const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, pp;
|
||||||
|
png_size_t i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_UP;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
|
pp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
|
i++, rp++, pp++, dp++)
|
||||||
|
{
|
||||||
|
*dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
@ -2319,7 +2369,11 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
{
|
{
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
||||||
|
@ -2327,7 +2381,11 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
||||||
& 0xff);
|
& 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
|
@ -2335,6 +2393,27 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_avg_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, pp, lp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_AVG;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
|
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
||||||
|
{
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
||||||
|
{
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
||||||
|
& 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
@ -2352,7 +2431,11 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
{
|
{
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
|
@ -2381,7 +2464,11 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
|
@ -2389,6 +2476,48 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_paeth_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, pp, cp, lp;
|
||||||
|
png_size_t i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_PAETH;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
|
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
||||||
|
{
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
int a, b, c, pa, pb, pc, p;
|
||||||
|
|
||||||
|
b = *pp++;
|
||||||
|
c = *cp++;
|
||||||
|
a = *lp++;
|
||||||
|
|
||||||
|
p = b - c;
|
||||||
|
pc = a - c;
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
pa = abs(p);
|
||||||
|
pb = abs(pc);
|
||||||
|
pc = abs(p + pc);
|
||||||
|
#else
|
||||||
|
pa = p < 0 ? -p : p;
|
||||||
|
pb = pc < 0 ? -pc : pc;
|
||||||
|
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
|
||||||
|
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /* WRITE_FILTER */
|
#endif /* WRITE_FILTER */
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
|
@ -2397,7 +2526,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
||||||
#ifndef PNG_WRITE_FILTER_SUPPORTED
|
#ifndef PNG_WRITE_FILTER_SUPPORTED
|
||||||
png_write_filtered_row(png_ptr, png_ptr->row_buf, row_info->rowbytes+1);
|
png_write_filtered_row(png_ptr, png_ptr->row_buf, row_info->rowbytes+1);
|
||||||
#else
|
#else
|
||||||
png_byte filter_to_do = png_ptr->do_filter;
|
unsigned int filter_to_do = png_ptr->do_filter;
|
||||||
png_bytep row_buf;
|
png_bytep row_buf;
|
||||||
png_bytep best_row;
|
png_bytep best_row;
|
||||||
png_uint_32 bpp;
|
png_uint_32 bpp;
|
||||||
|
@ -2443,32 +2572,33 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
||||||
*/
|
*/
|
||||||
best_row = png_ptr->row_buf;
|
best_row = png_ptr->row_buf;
|
||||||
|
|
||||||
|
if (PNG_SIZE_MAX/128 <= row_bytes)
|
||||||
if ((filter_to_do & PNG_FILTER_NONE) != 0 && filter_to_do != PNG_FILTER_NONE)
|
|
||||||
{
|
{
|
||||||
|
/* Overflow can occur in the calculation, just select the lowest set
|
||||||
|
* filter.
|
||||||
|
*/
|
||||||
|
filter_to_do &= 0U-filter_to_do;
|
||||||
|
}
|
||||||
|
else if ((filter_to_do & PNG_FILTER_NONE) != 0 &&
|
||||||
|
filter_to_do != PNG_FILTER_NONE)
|
||||||
|
{
|
||||||
|
/* Overflow not possible and multiple filters in the list, including the
|
||||||
|
* 'none' filter.
|
||||||
|
*/
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
png_size_t sum = 0;
|
png_size_t sum = 0;
|
||||||
png_size_t i;
|
png_size_t i;
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
if (PNG_SIZE_MAX/128 <= row_bytes)
|
|
||||||
{
|
|
||||||
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
|
||||||
{
|
|
||||||
/* Check for overflow */
|
|
||||||
if (sum > PNG_SIZE_MAX/128 - 256)
|
|
||||||
break;
|
|
||||||
|
|
||||||
v = *rp;
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* Overflow is not possible */
|
|
||||||
{
|
{
|
||||||
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
||||||
{
|
{
|
||||||
v = *rp;
|
v = *rp;
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2479,7 +2609,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
||||||
if (filter_to_do == PNG_FILTER_SUB)
|
if (filter_to_do == PNG_FILTER_SUB)
|
||||||
/* It's the only filter so no testing is needed */
|
/* It's the only filter so no testing is needed */
|
||||||
{
|
{
|
||||||
(void) png_setup_sub_row(png_ptr, bpp, row_bytes, mins);
|
png_setup_sub_row_only(png_ptr, bpp, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2505,7 +2635,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
||||||
/* Up filter */
|
/* Up filter */
|
||||||
if (filter_to_do == PNG_FILTER_UP)
|
if (filter_to_do == PNG_FILTER_UP)
|
||||||
{
|
{
|
||||||
(void) png_setup_up_row(png_ptr, row_bytes, mins);
|
png_setup_up_row_only(png_ptr, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2531,7 +2661,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
||||||
/* Avg filter */
|
/* Avg filter */
|
||||||
if (filter_to_do == PNG_FILTER_AVG)
|
if (filter_to_do == PNG_FILTER_AVG)
|
||||||
{
|
{
|
||||||
(void) png_setup_avg_row(png_ptr, bpp, row_bytes, mins);
|
png_setup_avg_row_only(png_ptr, bpp, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2555,9 +2685,9 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Paeth filter */
|
/* Paeth filter */
|
||||||
if ((filter_to_do == PNG_FILTER_PAETH) != 0)
|
if (filter_to_do == PNG_FILTER_PAETH)
|
||||||
{
|
{
|
||||||
(void) png_setup_paeth_row(png_ptr, bpp, row_bytes, mins);
|
png_setup_paeth_row_only(png_ptr, bpp, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue