зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1224244 - Update in-tree libpng to version 1.6.19. r=seth
This commit is contained in:
Родитель
fde5c53117
Коммит
60a6d95d13
|
@ -51,7 +51,7 @@ _SUBDIR_CONFIG_ARGS="$ac_configure_args"
|
|||
dnl Set the version number of the libs included with mozilla
|
||||
dnl ========================================================
|
||||
MOZJPEG=62
|
||||
MOZPNG=10617
|
||||
MOZPNG=10619
|
||||
NSPR_VERSION=4
|
||||
NSPR_MINVER=4.11
|
||||
NSS_VERSION=3
|
||||
|
|
|
@ -3756,8 +3756,9 @@ Version 1.5.7beta04 [November 17, 2011]
|
|||
|
||||
Version 1.5.7beta05 [November 25, 2011]
|
||||
Removed "zTXt" from warning in generic chunk decompression function.
|
||||
Validate time settings passed to pngset() and png_convert_to_rfc1123()
|
||||
(Frank Busse).
|
||||
Validate time settings passed to png_set_tIME() and png_convert_to_rfc1123()
|
||||
(Frank Busse). Note: This prevented CVE-2015-7981 from affecting
|
||||
libpng-1.5.7 and later.
|
||||
Added MINGW support to CMakeLists.txt
|
||||
Reject invalid compression flag or method when reading the iTXt chunk.
|
||||
Backed out 'simplified' API changes. The API seems too complex and there
|
||||
|
@ -3803,12 +3804,13 @@ Version 1.6.0beta01 [December 15, 2011]
|
|||
(the other two required headers aren't used). Non-ANSI systems that don't
|
||||
have stddef.h or limits.h will have to provide an appropriate fake
|
||||
containing the relevant types and #defines.
|
||||
The use of FAR/far has been eliminated and the definition of png_alloc_size_t
|
||||
is now controlled by a flag so that 'small size_t' systems can select it
|
||||
if necessary. Libpng 1.6 may not currently work on such systems -- it
|
||||
seems likely that it will ask 'malloc' for more than 65535 bytes with any
|
||||
image that has a sufficiently large row size (rather than simply failing
|
||||
to read such images).
|
||||
Dropped support for 16-bit platforms. The use of FAR/far has been eliminated
|
||||
and the definition of png_alloc_size_t is now controlled by a flag so
|
||||
that 'small size_t' systems can select it if necessary. Libpng 1.6 may
|
||||
not currently work on such systems -- it seems likely that it will
|
||||
ask 'malloc' for more than 65535 bytes with any image that has a
|
||||
sufficiently large row size (rather than simply failing to read such
|
||||
images).
|
||||
New tools directory containing tools used to generate libpng code.
|
||||
Fixed race conditions in parallel make builds. With higher degrees of
|
||||
parallelism during 'make' the use of the same temporary file names such
|
||||
|
@ -4420,7 +4422,7 @@ Version 1.6.1beta02 [February 19, 2013]
|
|||
|
||||
Version 1.6.1beta03 [February 22, 2013]
|
||||
Fixed ALIGNED_MEMORY support.
|
||||
Allow run-time ARM NEON checking to be disabled. A new configure option:
|
||||
Added a new configure option:
|
||||
--enable-arm-neon=always will stop the run-time checks. New checks
|
||||
within arm/arm_init.c will cause the code not to be compiled unless
|
||||
__ARM_NEON__ is set. This should make it fail safe (if someone asks
|
||||
|
@ -4439,10 +4441,10 @@ Version 1.6.1beta05 [March 1, 2013]
|
|||
Version 1.6.1beta06 [March 4, 2013]
|
||||
Better documentation of unknown handling API interactions.
|
||||
Corrected Android builds and corrected libpng.vers with symbol
|
||||
prefixing. This adds an API to set optimization options externally,
|
||||
prefixing. It also makes those tests compile and link on Android.
|
||||
Added an API png_set_option() to set optimization options externally,
|
||||
providing an alternative and general solution for the non-portable
|
||||
run-time tests used by the ARM Neon code. It also makes those tests
|
||||
compile and link on Android.
|
||||
run-time tests used by the ARM Neon code, using the PNG_ARM_NEON option.
|
||||
The order of settings vs options in pnglibconf.h is reversed to allow
|
||||
settings to depend on options and options can now set (or override) the
|
||||
defaults for settings.
|
||||
|
@ -4540,7 +4542,8 @@ Version 1.6.3beta05 [May 9, 2013]
|
|||
Calculate our own zlib windowBits when decoding rather than trusting the
|
||||
CMF bytes in the PNG datastream.
|
||||
Added an option to force maximum window size for inflating, which was
|
||||
the behavior of libpng15 and earlier.
|
||||
the behavior of libpng15 and earlier, via a new PNG_MAXIMUM_INFLATE_WINDOW
|
||||
option for png_set_options().
|
||||
Added png-fix-itxt and png-fix-too-far-back to the built programs and
|
||||
removed warnings from the source code and timepng that are revealed as
|
||||
a result.
|
||||
|
@ -5143,7 +5146,9 @@ Version 1.6.17beta01 [January 29, 2015]
|
|||
Added testing of png_set_packing() to pngvalid.c
|
||||
Regenerated configure scripts in the *.tar distributions with libtool-2.4.4
|
||||
Implement previously untested cases of libpng transforms in pngvalid.c
|
||||
Fixed byte order in 2-byte filler, in png_do_read_filler().
|
||||
Fixed byte order in png_do_read_filler() with 16-bit input. Previously
|
||||
the high and low bytes of the filler, from png_set_filler() or from
|
||||
png_set_add_alpha(), were read in the wrong order.
|
||||
Made the check for out-of-range values in png_set_tRNS() detect
|
||||
values that are exactly 2^bit_depth, and work on 16-bit platforms.
|
||||
Merged some parts of libpng-1.6.17beta01 and libpng-1.7.0beta47.
|
||||
|
@ -5225,7 +5230,7 @@ Version 1.6.18beta01 [April 1, 2015]
|
|||
|
||||
Version 1.6.18beta02 [April 26, 2015]
|
||||
Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
|
||||
(Bug report by Viktor Szaka'ts).
|
||||
(Bug report by Viktor Szakats).
|
||||
|
||||
Version 1.6.18beta03 [May 6, 2015]
|
||||
Replaced "unexpected" with an integer (0xabadca11) in pngset.c
|
||||
|
@ -5305,6 +5310,110 @@ Version 1.6.18rc03 [July 15, 2015]
|
|||
Version 1.6.18 [July 23, 2015]
|
||||
No changes.
|
||||
|
||||
Version 1.6.19beta01 [July 30, 2015]
|
||||
Updated obsolete information about the simplified API macros in the
|
||||
manual pages (Bug report by Arc Riley).
|
||||
Avoid potentially dereferencing NULL info_ptr in png_info_init_3().
|
||||
Rearranged png.h to put the major sections in the same order as
|
||||
in libpng17.
|
||||
Eliminated unused PNG_COST_SHIFT, PNG_WEIGHT_SHIFT, PNG_COST_FACTOR, and
|
||||
PNG_WEIGHT_FACTOR macros.
|
||||
Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
|
||||
(Bug report by Viktor Szakats). Several warnings remain and are
|
||||
unavoidable, where we test for overflow.
|
||||
Fixed potential leak of png_pixels in contrib/pngminus/pnm2png.c
|
||||
Fixed uninitialized variable in contrib/gregbook/rpng2-x.c
|
||||
|
||||
Version 1.6.19beta02 [August 19, 2015]
|
||||
Moved config.h.in~ from the "libpng_autotools_files" list to the
|
||||
"libpng_autotools_extra" list in autogen.sh because it was causing a
|
||||
false positive for missing files (bug report by Robert C. Seacord).
|
||||
Removed unreachable "break" statements in png.c, pngread.c, and pngrtran.c
|
||||
to suppress clang warnings (Bug report by Viktor Szakats).
|
||||
Fixed some bad links in the man page.
|
||||
Changed "n bit" to "n-bit" in comments.
|
||||
Added signed/unsigned 16-bit safety net. This removes the dubious
|
||||
0x8000 flag definitions on 16-bit systems. They aren't supported
|
||||
yet the defs *probably* work, however it seems much safer to do this
|
||||
and be advised if anyone, contrary to advice, is building libpng 1.6
|
||||
on a 16-bit system. It also adds back various switch default clauses
|
||||
for GCC; GCC errors out if they are not present (with an appropriately
|
||||
high level of warnings).
|
||||
Safely convert num_bytes to a png_byte in png_set_sig_bytes() (Robert
|
||||
Seacord).
|
||||
Fixed the recently reported 1's complement security issue by replacing
|
||||
the value that is illegal in the PNG spec, in both signed and unsigned
|
||||
values, with 0. Illegal unsigned values (anything greater than or equal
|
||||
to 0x80000000) can still pass through, but since these are not illegal
|
||||
in ANSI-C (unlike 0x80000000 in the signed case) the checking that
|
||||
occurs later can catch them (John Bowler).
|
||||
|
||||
Version 1.6.19beta03 [September 26, 2015]
|
||||
Fixed png_save_int_32 when int is not 2's complement (John Bowler).
|
||||
Updated libpng16 with all the recent test changes from libpng17,
|
||||
including changes to pngvalid.c to ensure that the original,
|
||||
distributed, version of contrib/visupng/cexcept.h can be used
|
||||
(John Bowler).
|
||||
pngvalid contains the correction to the use of SAVE/STORE_
|
||||
UNKNOWN_CHUNKS; a bug revealed by changes in libpng 1.7. More
|
||||
tests contain the --strict option to detect warnings and the
|
||||
pngvalid-standard test has been corrected so that it does not
|
||||
turn on progressive-read. There is a separate test which does
|
||||
that. (John Bowler)
|
||||
Also made some signed/unsigned fixes.
|
||||
Make pngstest error limits version specific. Splitting the machine
|
||||
generated error structs out to a file allows the values to be updated
|
||||
without changing pngstest.c itself. Since libpng 1.6 and 1.7 have
|
||||
slightly different error limits this simplifies maintenance. The
|
||||
makepngs.sh script has also been updated to more accurately reflect
|
||||
current problems in libpng 1.7 (John Bowler).
|
||||
Incorporated new test PNG files into make check. tests/pngstest-*
|
||||
are changed so that the new test files are divided into 8 groups by
|
||||
gamma and alpha channel. These tests have considerably better code
|
||||
and pixel-value coverage than contrib/pngsuite; however,coverage is
|
||||
still incomplete (John Bowler).
|
||||
Removed the '--strict' in 1.6 because of the double-gamma-correction
|
||||
warning, updated pngstest-errors.h for the errors detected with the
|
||||
new contrib/testspngs PNG test files (John Bowler).
|
||||
|
||||
Version 1.6.19beta04 [October 15, 2015]
|
||||
Worked around rgb-to-gray issues in libpng 1.6. The previous
|
||||
attempts to ignore the errors in the code aren't quite enough to
|
||||
deal with the 'channel selection' encoding added to libpng 1.7; abort.
|
||||
pngvalid.c is changed to drop this encoding in prior versions.
|
||||
Fixed 'pow' macros in pngvalid.c. It is legal for 'pow' to be a
|
||||
macro, therefore the argument list cannot contain preprocessing
|
||||
directives. Make sure pow is a function where this happens. This is
|
||||
a minimal safe fix, the issue only arises in non-performance-critical
|
||||
code (bug report by Curtis Leach, fix by John Bowler).
|
||||
Added sPLT support to pngtest.c
|
||||
|
||||
Version 1.6.19rc01 [October 23, 2015]
|
||||
No changes.
|
||||
|
||||
Version 1.6.19rc02 [October 31, 2015]
|
||||
Prevent setting or writing over-length PLTE chunk (Cosmin Truta).
|
||||
Silently truncate over-length PLTE chunk while reading.
|
||||
Libpng incorrectly calculated the output rowbytes when the application
|
||||
decreased either the number of channels or the bit depth (or both) in
|
||||
a user transform. This was safe; libpng overallocated buffer space
|
||||
(potentially by quite a lot; up to 4 times the amount required) but,
|
||||
from 1.5.4 on, resulted in a png_error (John Bowler).
|
||||
|
||||
Version 1.6.19rc03 [November 3, 2015]
|
||||
Fixed some inconsequential cut-and-paste typos in png_set_cHRM_XYZ_fixed().
|
||||
Clarified COPYRIGHT information to state explicitly that versions
|
||||
are derived from previous versions.
|
||||
Removed much of the long list of previous versions from png.h and
|
||||
libpng.3.
|
||||
|
||||
Version 1.6.19rc04 [November 5, 2015]
|
||||
Fixed new bug with CRC error after reading an over-length palette
|
||||
(bug report by Cosmin Truta).
|
||||
|
||||
Version 1.6.19 [November 12, 2015]
|
||||
Cleaned up coding style in png_handle_PLTE().
|
||||
|
||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||
(subscription required; visit
|
||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||
|
|
|
@ -12,18 +12,19 @@ pnglibconf.h and moz.build are distributed under the Mozilla Public License,
|
|||
v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
||||
obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
This modified version of libpng code adds animated PNG support. This code is
|
||||
This modified version of libpng code adds animated PNG support and is
|
||||
released under the libpng license described below. The modifications are
|
||||
Copyright (c) 2006-2007 Andrew Smith, Copyright (c) 2008-2015 Max Stepin,
|
||||
and can be identified by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
and are delimited by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
surrounding them in the modified libpng source files.
|
||||
|
||||
This code is released under the libpng license.
|
||||
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.6.18, July 23, 2015, are
|
||||
Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are
|
||||
distributed according to the same disclaimer and license as libpng-1.0.6
|
||||
with the following individuals added to the list of Contributing Authors:
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.6.19, November 12, 2015, are
|
||||
Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are
|
||||
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
|
||||
added to the list of Contributing Authors:
|
||||
|
||||
Simon-Pierre Cadieux
|
||||
Eric S. Raymond
|
||||
|
@ -42,18 +43,20 @@ and with the following additions to the disclaimer:
|
|||
the user.
|
||||
|
||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson, and are distributed according
|
||||
to the same disclaimer and license as libpng-0.96, with the following
|
||||
individuals added to the list of Contributing Authors:
|
||||
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||
libpng-0.96, and are distributed according to the same disclaimer and
|
||||
license as libpng-0.96, with the following individuals added to the list
|
||||
of Contributing Authors:
|
||||
|
||||
Tom Lane
|
||||
Glenn Randers-Pehrson
|
||||
Willem van Schaik
|
||||
|
||||
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||
Copyright (c) 1996-1997 Andreas Dilger, and are
|
||||
distributed according to the same disclaimer and license as libpng-0.88,
|
||||
with the following individuals added to the list of Contributing Authors:
|
||||
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||
and are distributed according to the same disclaimer and license as
|
||||
libpng-0.88, with the following individuals added to the list of
|
||||
Contributing Authors:
|
||||
|
||||
John Bowler
|
||||
Kevin Bracey
|
||||
|
@ -100,6 +103,8 @@ supporting the PNG file format in commercial products. If you use this
|
|||
source code in a product, acknowledgment is not required but would be
|
||||
appreciated.
|
||||
|
||||
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||
|
||||
A "png_get_copyright" function is available, for convenient use in "about"
|
||||
boxes and the like:
|
||||
|
||||
|
@ -114,4 +119,4 @@ the additional disclaimers inserted at version 1.0.7.
|
|||
|
||||
Glenn Randers-Pehrson
|
||||
glennrp at users.sourceforge.net
|
||||
July 23, 2015
|
||||
November 12, 2015
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
|
||||
Changes made to pristine libpng source by mozilla.org developers.
|
||||
|
||||
2015/11/12 -- Synced with libpng-1.6.19 (bug #1224244).
|
||||
|
||||
2015/07/30 -- Synced with libpng-1.6.18 (bug #1186977).
|
||||
|
||||
2015/03/27 -- Synced with libpng-1.6.17 (bug #1147909).
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
README for libpng version 1.6.18 - July 23, 2015 (shared library 16.0)
|
||||
README for libpng version 1.6.19 - November 12, 2015 (shared library 16.0)
|
||||
See the note about version numbers near the top of png.h
|
||||
|
||||
See INSTALL for instructions on how to install libpng.
|
||||
|
|
|
@ -6,15 +6,15 @@ Index: LICENSE
|
|||
If you modify libpng you may insert additional notices immediately following
|
||||
this sentence.
|
||||
|
||||
+This modified version of libpng code adds animated PNG support. This code is
|
||||
+This modified version of libpng code adds animated PNG support and is
|
||||
+released under the libpng license described below. The modifications are
|
||||
+Copyright (c) 2006-2007 Andrew Smith, Copyright (c) 2008-2015 Max Stepin,
|
||||
+and can be identified by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
+and are delimited by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
+surrounding them in the modified libpng source files.
|
||||
+
|
||||
This code is released under the libpng license.
|
||||
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.6.18, July 23, 2015, are
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.6.19, November 12, 2015, are
|
||||
Index: pngread.c
|
||||
===================================================================
|
||||
--- pngread.c
|
||||
|
@ -291,24 +291,65 @@ Index: pngget.c
|
|||
+}
|
||||
+#endif /* APNG */
|
||||
#endif /* READ || WRITE */
|
||||
Index: png.c
|
||||
===================================================================
|
||||
--- png.c
|
||||
+++ png.c
|
||||
@@ -775,16 +775,20 @@
|
||||
#else
|
||||
# ifdef __STDC__
|
||||
return PNG_STRING_NEWLINE \
|
||||
- "libpng version 1.6.19 - November 12, 2015" PNG_STRING_NEWLINE \
|
||||
+ "libpng version 1.6.19+apng - November 12, 2015" PNG_STRING_NEWLINE \
|
||||
"Copyright (c) 1998-2015 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
|
||||
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
||||
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
||||
- PNG_STRING_NEWLINE;
|
||||
+ PNG_STRING_NEWLINE \
|
||||
+ "Portions Copyright (c) 2006-2007 Andrew Smith" PNG_STRING_NEWLINE \
|
||||
+ "Portions Copyright (c) 2008-2015 Max Stepin" PNG_STRING_NEWLINE ;
|
||||
# else
|
||||
- return "libpng version 1.6.19 - November 12, 2015\
|
||||
+ return "libpng version 1.6.19+apng - November 12, 2015\
|
||||
Copyright (c) 1998-2015 Glenn Randers-Pehrson\
|
||||
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.\
|
||||
+ Portions Copyright (c) 2006-2007 Andrew Smith\
|
||||
+ Portions Copyright (c) 2008-2015 Max Stepin";
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
Index: png.h
|
||||
===================================================================
|
||||
--- png.h
|
||||
+++ png.h
|
||||
@@ -248,6 +248,12 @@
|
||||
@@ -22,6 +22,12 @@
|
||||
* If you modify libpng you may insert additional notices immediately following
|
||||
* this sentence.
|
||||
*
|
||||
+ * This modified version of libpng code adds animated PNG support. This code is
|
||||
+ * This modified version of libpng code adds animated PNG support and is
|
||||
+ * released under the libpng license described below. The modifications are
|
||||
+ * Copyright (c) 2006-2007 Andrew Smith, Copyright (c) 2008-2015 Max Stepin,
|
||||
+ * and can be identified by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
+ * and are delimited by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
+ * surrounding them in the modified libpng source files.
|
||||
+ *
|
||||
* This code is released under the libpng license.
|
||||
*
|
||||
* libpng versions 1.0.7, July 1, 2000, through 1.6.18, July 23, 2015, are
|
||||
@@ -480,6 +486,10 @@
|
||||
* libpng versions 1.0.7, July 1, 2000, through 1.6.19, November 12, 2015, are
|
||||
@@ -281,9 +287,9 @@
|
||||
*/
|
||||
|
||||
/* Version information for png.h - this should match the version in png.c */
|
||||
-#define PNG_LIBPNG_VER_STRING "1.6.19"
|
||||
+#define PNG_LIBPNG_VER_STRING "1.6.19+apng"
|
||||
#define PNG_HEADER_VERSION_STRING \
|
||||
- " libpng version 1.6.19 - November 12, 2015\n"
|
||||
+ " libpng version 1.6.19+apng - November 12, 2015\n"
|
||||
|
||||
#define PNG_LIBPNG_VER_SONUM 16
|
||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||
@@ -334,6 +340,10 @@
|
||||
# include "pnglibconf.h"
|
||||
#endif
|
||||
|
||||
|
@ -319,7 +360,7 @@ Index: png.h
|
|||
#ifndef PNG_VERSION_INFO_ONLY
|
||||
/* Machine specific configuration. */
|
||||
# include "pngconf.h"
|
||||
@@ -570,6 +580,17 @@
|
||||
@@ -429,6 +439,17 @@
|
||||
* See pngconf.h for base types that vary by machine/system
|
||||
*/
|
||||
|
||||
|
@ -337,10 +378,10 @@ Index: png.h
|
|||
/* This triggers a compiler error in png.c, if png.c and png.h
|
||||
* do not agree upon the version number.
|
||||
*/
|
||||
@@ -890,6 +911,10 @@
|
||||
#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
|
||||
#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
|
||||
@@ -751,6 +772,10 @@
|
||||
#if INT_MAX >= 0x8000 /* else this might break */
|
||||
#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
|
||||
#endif
|
||||
+#ifdef PNG_APNG_SUPPORTED
|
||||
+#define PNG_INFO_acTL 0x10000
|
||||
+#define PNG_INFO_fcTL 0x20000
|
||||
|
@ -348,7 +389,7 @@ Index: png.h
|
|||
|
||||
/* This is used for the transformation routines, as some of them
|
||||
* change these values for the row. It also should enable using
|
||||
@@ -927,6 +952,10 @@
|
||||
@@ -788,6 +813,10 @@
|
||||
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
||||
typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
|
||||
typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
|
||||
|
@ -359,7 +400,7 @@ Index: png.h
|
|||
|
||||
/* The following callback receives png_uint_32 row_number, int pass for the
|
||||
* png_bytep data of the row. When transforming an interlaced image the
|
||||
@@ -3245,6 +3274,75 @@
|
||||
@@ -3109,6 +3138,75 @@
|
||||
* END OF HARDWARE AND SOFTWARE OPTIONS
|
||||
******************************************************************************/
|
||||
|
||||
|
@ -435,7 +476,7 @@ Index: png.h
|
|||
/* Maintainer: Put new public prototypes here ^, in libpng.3, in project
|
||||
* defs, and in scripts/symbols.def.
|
||||
*/
|
||||
@@ -3253,7 +3351,11 @@
|
||||
@@ -3117,7 +3215,11 @@
|
||||
* one to use is one more than this.)
|
||||
*/
|
||||
#ifdef PNG_EXPORT_LAST_ORDINAL
|
||||
|
@ -462,7 +503,7 @@ Index: pngpriv.h
|
|||
|
||||
/* Flags for the transformations the PNG library does on the image data */
|
||||
#define PNG_BGR 0x0001
|
||||
@@ -758,6 +762,16 @@
|
||||
@@ -754,6 +758,16 @@
|
||||
#define png_tRNS PNG_U32(116, 82, 78, 83)
|
||||
#define png_zTXt PNG_U32(122, 84, 88, 116)
|
||||
|
||||
|
@ -479,7 +520,7 @@ Index: pngpriv.h
|
|||
/* The following will work on (signed char*) strings, whereas the get_uint_32
|
||||
* macro will fail on top-bit-set values because of the sign extension.
|
||||
*/
|
||||
@@ -1437,6 +1451,49 @@
|
||||
@@ -1433,6 +1447,49 @@
|
||||
|
||||
#endif /* PROGRESSIVE_READ */
|
||||
|
||||
|
@ -904,7 +945,7 @@ Index: pngset.c
|
|||
}
|
||||
|
||||
#ifdef PNG_oFFs_SUPPORTED
|
||||
@@ -1089,6 +1094,146 @@
|
||||
@@ -1094,6 +1099,146 @@
|
||||
}
|
||||
#endif /* sPLT */
|
||||
|
||||
|
@ -1055,7 +1096,7 @@ Index: pngrutil.c
|
|||
===================================================================
|
||||
--- pngrutil.c
|
||||
+++ pngrutil.c
|
||||
@@ -818,6 +818,11 @@
|
||||
@@ -824,6 +824,11 @@
|
||||
filter_type = buf[11];
|
||||
interlace_type = buf[12];
|
||||
|
||||
|
@ -1067,7 +1108,7 @@ Index: pngrutil.c
|
|||
/* Set internal variables */
|
||||
png_ptr->width = width;
|
||||
png_ptr->height = height;
|
||||
@@ -2704,6 +2709,180 @@
|
||||
@@ -2724,6 +2729,180 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1248,7 +1289,7 @@ Index: pngrutil.c
|
|||
#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
|
||||
/* Utility function for png_handle_unknown; set up png_ptr::unknown_chunk */
|
||||
static int
|
||||
@@ -3963,6 +4142,38 @@
|
||||
@@ -3983,6 +4162,38 @@
|
||||
uInt avail_in;
|
||||
png_bytep buffer;
|
||||
|
||||
|
@ -1287,7 +1328,7 @@ Index: pngrutil.c
|
|||
while (png_ptr->idat_size == 0)
|
||||
{
|
||||
png_crc_finish(png_ptr, 0);
|
||||
@@ -3974,6 +4185,7 @@
|
||||
@@ -3994,6 +4205,7 @@
|
||||
if (png_ptr->chunk_name != png_IDAT)
|
||||
png_error(png_ptr, "Not enough image data");
|
||||
}
|
||||
|
@ -1295,7 +1336,7 @@ Index: pngrutil.c
|
|||
|
||||
avail_in = png_ptr->IDAT_read_size;
|
||||
|
||||
@@ -4037,6 +4249,9 @@
|
||||
@@ -4057,6 +4269,9 @@
|
||||
|
||||
png_ptr->mode |= PNG_AFTER_IDAT;
|
||||
png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
|
||||
|
@ -1305,7 +1346,7 @@ Index: pngrutil.c
|
|||
|
||||
if (png_ptr->zstream.avail_in > 0 || png_ptr->idat_size > 0)
|
||||
png_chunk_benign_error(png_ptr, "Extra compressed data");
|
||||
@@ -4475,4 +4690,80 @@
|
||||
@@ -4495,4 +4710,80 @@
|
||||
|
||||
png_ptr->flags |= PNG_FLAG_ROW_INIT;
|
||||
}
|
||||
|
@ -1402,7 +1443,7 @@ Index: pngwutil.c
|
|||
if ((png_ptr->do_filter) == PNG_NO_FILTERS)
|
||||
{
|
||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
|
||||
@@ -1079,7 +1084,15 @@
|
||||
@@ -1082,7 +1087,15 @@
|
||||
optimize_cmf(data, png_image_size(png_ptr));
|
||||
#endif
|
||||
|
||||
|
@ -1418,7 +1459,7 @@ Index: pngwutil.c
|
|||
png_ptr->mode |= PNG_HAVE_IDAT;
|
||||
|
||||
png_ptr->zstream.next_out = data;
|
||||
@@ -1125,7 +1138,15 @@
|
||||
@@ -1128,7 +1141,15 @@
|
||||
optimize_cmf(data, png_image_size(png_ptr));
|
||||
#endif
|
||||
|
||||
|
@ -1434,7 +1475,7 @@ Index: pngwutil.c
|
|||
png_ptr->zstream.avail_out = 0;
|
||||
png_ptr->zstream.next_out = NULL;
|
||||
png_ptr->mode |= PNG_HAVE_IDAT | PNG_AFTER_IDAT;
|
||||
@@ -1938,6 +1959,82 @@
|
||||
@@ -1941,6 +1962,82 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1517,7 +1558,7 @@ Index: pngwutil.c
|
|||
/* Initializes the row writing capability of libpng */
|
||||
void /* PRIVATE */
|
||||
png_write_start_row(png_structrp png_ptr)
|
||||
@@ -2704,4 +2801,39 @@
|
||||
@@ -2706,4 +2803,39 @@
|
||||
}
|
||||
#endif /* WRITE_FLUSH */
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
libpng-manual.txt - A description on how to use and modify libpng
|
||||
|
||||
libpng version 1.6.18 - July 23, 2015
|
||||
libpng version 1.6.19 - November 12, 2015
|
||||
Updated and distributed by Glenn Randers-Pehrson
|
||||
<glennrp at users.sourceforge.net>
|
||||
Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
|
@ -11,7 +11,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||
|
||||
Based on:
|
||||
|
||||
libpng versions 0.97, January 1998, through 1.6.18 - July 23, 2015
|
||||
libpng versions 0.97, January 1998, through 1.6.19 - November 12, 2015
|
||||
Updated and distributed by Glenn Randers-Pehrson
|
||||
Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
|
||||
|
@ -70,15 +70,16 @@ a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at
|
|||
The W3C and ISO documents have identical technical content.
|
||||
|
||||
The PNG-1.2 specification is available at
|
||||
<http://www.libpng.org/pub/png/documents/>. It is technically equivalent
|
||||
<http://png-mng.sourceforge.net/pub/png/spec/1.2/>.
|
||||
It is technically equivalent
|
||||
to the PNG specification (second edition) but has some additional material.
|
||||
|
||||
The PNG-1.0 specification is available
|
||||
as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
|
||||
W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
|
||||
The PNG-1.0 specification is available as RFC 2083
|
||||
<http://png-mng.sourceforge.net/pub/png/spec/1.0/> and as a
|
||||
W3C Recommendation <http://www.w3.org/TR/REC-png-961001>.
|
||||
|
||||
Some additional chunks are described in the special-purpose public chunks
|
||||
documents at <http://www.libpng.org/pub/png/documents/>.
|
||||
documents at <http://www.libpng.org/pub/png/spec/register/>
|
||||
|
||||
Other information
|
||||
about PNG, and the latest version of libpng, can be found at the PNG home
|
||||
|
@ -100,7 +101,7 @@ majority of the needs of its users.
|
|||
|
||||
Libpng uses zlib for its compression and decompression of PNG files.
|
||||
Further information about zlib, and the latest version of zlib, can
|
||||
be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
|
||||
be found at the zlib home page, <http://zlib.net/>.
|
||||
The zlib compression utility is a general purpose utility that is
|
||||
useful for more than PNG files, and can be used without libpng.
|
||||
See the documentation delivered with zlib for more details.
|
||||
|
@ -649,6 +650,7 @@ User limits
|
|||
|
||||
The PNG specification allows the width and height of an image to be as
|
||||
large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
|
||||
For safety, libpng imposes a default limit of 1 million rows and columns.
|
||||
Larger images will be rejected immediately with a png_error() call. If
|
||||
you wish to change these limits, you can use
|
||||
|
||||
|
@ -669,8 +671,11 @@ If you need to retrieve the limits that are being applied, use
|
|||
height_max = png_get_user_height_max(png_ptr);
|
||||
|
||||
The PNG specification sets no limit on the number of ancillary chunks
|
||||
allowed in a PNG datastream. You can impose a limit on the total number
|
||||
of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
|
||||
allowed in a PNG datastream. By default, libpng imposes a limit of
|
||||
a total of 1000 sPLT, tEXt, iTXt, zTXt, and unknown chunks to be stored.
|
||||
If you have set up both info_ptr and end_info_ptr, the limit applies
|
||||
separately to each. You can change the limit on the total number of such
|
||||
chunks that will be stored, with
|
||||
|
||||
png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
|
||||
|
||||
|
@ -678,8 +683,9 @@ where 0x7fffffffL means unlimited. You can retrieve this limit with
|
|||
|
||||
chunk_cache_max = png_get_chunk_cache_max(png_ptr);
|
||||
|
||||
You can also set a limit on the amount of memory that a compressed chunk
|
||||
other than IDAT can occupy, with
|
||||
Libpng imposes a limit of 8 Megabytes (8,000,000 bytes) on the amount of
|
||||
memory that a compressed chunk other than IDAT can occupy, when decompressed.
|
||||
You can change this limit with
|
||||
|
||||
png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
|
||||
|
||||
|
@ -1679,15 +1685,16 @@ described below.
|
|||
Data will be decoded into the supplied row buffers packed into bytes
|
||||
unless the library has been told to transform it into another format.
|
||||
For example, 4 bit/pixel paletted or grayscale data will be returned
|
||||
2 pixels/byte with the leftmost pixel in the high-order bits of the
|
||||
byte, unless png_set_packing() is called. 8-bit RGB data will be stored
|
||||
2 pixels/byte with the leftmost pixel in the high-order bits of the byte,
|
||||
unless png_set_packing() is called. 8-bit RGB data will be stored
|
||||
in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
|
||||
is called to insert filler bytes, either before or after each RGB triplet.
|
||||
|
||||
16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
|
||||
byte of the color value first, unless png_set_scale_16() is called to
|
||||
transform it to regular RGB RGB triplets, or png_set_filler() or
|
||||
png_set_add alpha() is called to insert filler bytes, either before or
|
||||
after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
|
||||
png_set_add alpha() is called to insert two filler bytes, either before
|
||||
or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
|
||||
be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
|
||||
or png_set_scale_16().
|
||||
|
||||
|
@ -1844,12 +1851,13 @@ into 4 or 8 bytes for windowing systems that need them in this format:
|
|||
if (color_type == PNG_COLOR_TYPE_RGB)
|
||||
png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
|
||||
|
||||
where "filler" is the 8 or 16-bit number to fill with, and the location is
|
||||
either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
|
||||
you want the filler before the RGB or after. This transformation
|
||||
does not affect images that already have full alpha channels. To add an
|
||||
opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
|
||||
will generate RGBA pixels.
|
||||
where "filler" is the 8-bit or 16-bit number to fill with, and the location
|
||||
is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
|
||||
you want the filler before the RGB or after. When filling an 8-bit pixel,
|
||||
the least significant 8 bits of the number are used, if a 16-bit number is
|
||||
supplied. This transformation does not affect images that already have full
|
||||
alpha channels. To add an opaque alpha channel, use filler=0xffff and
|
||||
PNG_FILLER_AFTER which will generate RGBA pixels.
|
||||
|
||||
Note that png_set_filler() does not change the color type. If you want
|
||||
to do that, you can add a true alpha channel with
|
||||
|
@ -1859,7 +1867,7 @@ to do that, you can add a true alpha channel with
|
|||
png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
|
||||
|
||||
where "filler" contains the alpha value to assign to each pixel.
|
||||
This function was added in libpng-1.2.7.
|
||||
The png_set_add_alpha() function was added in libpng-1.2.7.
|
||||
|
||||
If you are reading an image with an alpha channel, and you need the
|
||||
data as ARGB instead of the normal PNG format RGBA:
|
||||
|
@ -1917,9 +1925,9 @@ data for sBIT, regardless of the error_action setting.
|
|||
The default values come from the PNG file cHRM chunk if present; otherwise, the
|
||||
defaults correspond to the ITU-R recommendation 709, and also the sRGB color
|
||||
space, as recommended in the Charles Poynton's Colour FAQ,
|
||||
<http://www.poynton.com/>, in section 9:
|
||||
Copyright (c) 2006-11-28 Charles Poynton, in section 9:
|
||||
|
||||
<http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9>
|
||||
<http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9>
|
||||
|
||||
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
|
||||
|
||||
|
@ -3716,21 +3724,26 @@ as a wide variety of APIs to manipulate ancilliary information.
|
|||
|
||||
To read a PNG file using the simplified API:
|
||||
|
||||
1) Declare a 'png_image' structure (see below) on the
|
||||
stack and memset() it to all zero.
|
||||
1) Declare a 'png_image' structure (see below) on the stack, set the
|
||||
version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL
|
||||
(this is REQUIRED, your program may crash if you don't do it.)
|
||||
|
||||
2) Call the appropriate png_image_begin_read... function.
|
||||
|
||||
3) Set the png_image 'format' member to the required
|
||||
format and allocate a buffer for the image.
|
||||
3) Set the png_image 'format' member to the required sample format.
|
||||
|
||||
4) Call png_image_finish_read to read the image into
|
||||
your buffer.
|
||||
4) Allocate a buffer for the image and, if required, the color-map.
|
||||
|
||||
5) Call png_image_finish_read to read the image and, if required, the
|
||||
color-map into your buffers.
|
||||
|
||||
There are no restrictions on the format of the PNG input itself; all valid
|
||||
color types, bit depths, and interlace methods are acceptable, and the
|
||||
input image is transformed as necessary to the requested in-memory format
|
||||
during the png_image_finish_read() step.
|
||||
during the png_image_finish_read() step. The only caveat is that if you
|
||||
request a color-mapped image from a PNG that is full-color or makes
|
||||
complex use of an alpha channel the transformation is extremely lossy and the
|
||||
result may look terrible.
|
||||
|
||||
To write a PNG file using the simplified API:
|
||||
|
||||
|
@ -3739,34 +3752,35 @@ To write a PNG file using the simplified API:
|
|||
|
||||
2) Initialize the members of the structure that describe the
|
||||
image, setting the 'format' member to the format of the
|
||||
image in memory.
|
||||
image samples.
|
||||
|
||||
3) Call the appropriate png_image_write... function with a
|
||||
pointer to the image to write the PNG data.
|
||||
pointer to the image and, if necessary, the color-map to write
|
||||
the PNG data.
|
||||
|
||||
png_image is a structure that describes the in-memory format of an image
|
||||
when it is being read or define the in-memory format of an image that you
|
||||
when it is being read or defines the in-memory format of an image that you
|
||||
need to write. The "png_image" structure contains the following members:
|
||||
|
||||
png_controlp opaque Initialize to NULL, free with png_image_free
|
||||
png_uint_32 version Set to PNG_IMAGE_VERSION
|
||||
png_uint_32 width Image width in pixels (columns)
|
||||
png_uint_32 height Image height in pixels (rows)
|
||||
png_uint_32 format Image format as defined below
|
||||
png_uint_32 flags A bit mask containing informational flags
|
||||
png_controlp opaque Initialize to NULL, free with png_image_free
|
||||
png_uint_32 colormap_entries; Number of entries in the color-map
|
||||
png_uint_32 warning_or_error;
|
||||
char message[64];
|
||||
|
||||
In the event of an error or warning the following field warning_or_error
|
||||
In the event of an error or warning the "warning_or_error"
|
||||
field will be set to a non-zero value and the 'message' field will contain
|
||||
a '\0' terminated string with the libpng error or warning message. If both
|
||||
warnings and an error were encountered, only the error is recorded. If there
|
||||
are multiple warnings, only the first one is recorded.
|
||||
|
||||
The upper 30 bits of this value are reserved; the low two bits contain
|
||||
a two bit code such that a value more than 1 indicates a failure in the API
|
||||
just called:
|
||||
The upper 30 bits of the "warning_or_error" value are reserved; the low two
|
||||
bits contain a two bit code such that a value more than 1 indicates a failure
|
||||
in the API just called:
|
||||
|
||||
0 - no warning or error
|
||||
1 - warning
|
||||
|
@ -3798,64 +3812,72 @@ channels are linear. Color channels use the RGB encoding (RGB end-points) of
|
|||
the sRGB specification. This encoding is identified by the
|
||||
PNG_FORMAT_FLAG_LINEAR flag below.
|
||||
|
||||
When the simplified API needs to convert between sRGB and linear colorspaces,
|
||||
the actual sRGB transfer curve defined in the sRGB specification (see the
|
||||
article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
|
||||
approximation used elsewhere in libpng.
|
||||
|
||||
When an alpha channel is present it is expected to denote pixel coverage
|
||||
of the color or luminance channels and is returned as an associated alpha
|
||||
channel: the color/gray channels are scaled (pre-multiplied) by the alpha
|
||||
value.
|
||||
|
||||
When a color-mapped image is used as a result of calling
|
||||
png_image_read_colormap or png_image_write_colormap the channels are encoded
|
||||
in the color-map and the descriptions above apply to the color-map entries.
|
||||
The image data is encoded as small integers, value 0..255, that index the
|
||||
entries in the color-map. One integer (one byte) is stored for each pixel.
|
||||
The samples are either contained directly in the image data, between 1 and 8
|
||||
bytes per pixel according to the encoding, or are held in a color-map indexed
|
||||
by bytes in the image data. In the case of a color-map the color-map entries
|
||||
are individual samples, encoded as above, and the image data has one byte per
|
||||
pixel to select the relevant sample from the color-map.
|
||||
|
||||
PNG_FORMAT_*
|
||||
|
||||
The #defines to be used in png_image::format. Each #define identifies a
|
||||
particular layout of channel data and, if present, alpha values. There are
|
||||
separate defines for each of the two channel encodings.
|
||||
separate defines for each of the two component encodings.
|
||||
|
||||
A format is built up using single bit flag values. Not all combinations are
|
||||
valid: use the bit flag values below for testing a format returned by the
|
||||
read APIs, but set formats from the derived values.
|
||||
A format is built up using single bit flag values. All combinations are
|
||||
valid. Formats can be built up from the flag values or you can use one of
|
||||
the predefined values below. When testing formats always use the FORMAT_FLAG
|
||||
macros to test for individual features - future versions of the library may
|
||||
add new flags.
|
||||
|
||||
When reading or writing color-mapped images the format should be set to the
|
||||
format of the entries in the color-map then png_image_{read,write}_colormap
|
||||
called to read or write the color-map and set the format correctly for the
|
||||
image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
|
||||
|
||||
NOTE: libpng can be built with particular features disabled, if you see
|
||||
NOTE: libpng can be built with particular features disabled. If you see
|
||||
compiler errors because the definition of one of the following flags has been
|
||||
compiled out it is because libpng does not have the required support. It is
|
||||
possible, however, for the libpng configuration to enable the format on just
|
||||
read or just write; in that case you may see an error at run time. You can
|
||||
guard against this by checking for the definition of:
|
||||
read or just write; in that case you may see an error at run time.
|
||||
You can guard against this by checking for the definition of the
|
||||
appropriate "_SUPPORTED" macro, one of:
|
||||
|
||||
PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
|
||||
|
||||
PNG_FORMAT_FLAG_ALPHA 0x01 format with an alpha channel
|
||||
PNG_FORMAT_FLAG_COLOR 0x02 color format: otherwise grayscale
|
||||
PNG_FORMAT_FLAG_LINEAR 0x04 png_uint_16 channels else png_byte
|
||||
PNG_FORMAT_FLAG_COLORMAP 0x08 libpng use only
|
||||
PNG_FORMAT_FLAG_BGR 0x10 BGR colors, else order is RGB
|
||||
PNG_FORMAT_FLAG_AFIRST 0x20 alpha channel comes first
|
||||
PNG_FORMAT_FLAG_ALPHA format with an alpha channel
|
||||
PNG_FORMAT_FLAG_COLOR color format: otherwise grayscale
|
||||
PNG_FORMAT_FLAG_LINEAR 2-byte channels else 1-byte
|
||||
PNG_FORMAT_FLAG_COLORMAP image data is color-mapped
|
||||
PNG_FORMAT_FLAG_BGR BGR colors, else order is RGB
|
||||
PNG_FORMAT_FLAG_AFIRST alpha channel comes first
|
||||
|
||||
Supported formats are as follows. Future versions of libpng may support more
|
||||
formats; for compatibility with older versions simply check if the format
|
||||
macro is defined using #ifdef. These defines describe the in-memory layout
|
||||
of the components of the pixels of the image.
|
||||
|
||||
First the single byte formats:
|
||||
First the single byte (sRGB) formats:
|
||||
|
||||
PNG_FORMAT_GRAY 0
|
||||
PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA
|
||||
PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
|
||||
PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR
|
||||
PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
|
||||
PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
|
||||
PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
|
||||
PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
|
||||
PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
|
||||
PNG_FORMAT_GRAY
|
||||
PNG_FORMAT_GA
|
||||
PNG_FORMAT_AG
|
||||
PNG_FORMAT_RGB
|
||||
PNG_FORMAT_BGR
|
||||
PNG_FORMAT_RGBA
|
||||
PNG_FORMAT_ARGB
|
||||
PNG_FORMAT_BGRA
|
||||
PNG_FORMAT_ABGR
|
||||
|
||||
Then the linear 2-byte formats. When naming these "Y" is used to
|
||||
indicate a luminance (gray) channel. The component order within the pixel
|
||||
|
@ -3864,22 +3886,22 @@ components in the linear format. The components are 16-bit integers in
|
|||
the native byte order for your platform, and there is no provision for
|
||||
swapping the bytes to a different endian condition.
|
||||
|
||||
PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
|
||||
PNG_FORMAT_LINEAR_Y
|
||||
PNG_FORMAT_LINEAR_Y_ALPHA
|
||||
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
|
||||
PNG_FORMAT_LINEAR_RGB
|
||||
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
|
||||
PNG_FORMAT_LINEAR_RGB_ALPHA
|
||||
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|
|
||||
PNG_FORMAT_FLAG_ALPHA)
|
||||
|
||||
Color-mapped formats are obtained by calling png_image_{read,write}_colormap,
|
||||
as appropriate after setting png_image::format to the format of the color-map
|
||||
to be read or written. Applications may check the value of
|
||||
PNG_FORMAT_FLAG_COLORMAP to see if they have called the colormap API. The
|
||||
format of the color-map may be extracted using the following macro.
|
||||
With color-mapped formats the image data is one byte for each pixel. The byte
|
||||
is an index into the color-map which is formatted as above. To obtain a
|
||||
color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
|
||||
to one of the above definitions, or you can use one of the definitions below.
|
||||
|
||||
PNG_FORMAT_OF_COLORMAP(fmt) ((fmt) & ~PNG_FORMAT_FLAG_COLORMAP)
|
||||
PNG_FORMAT_RGB_COLORMAP
|
||||
PNG_FORMAT_BGR_COLORMAP
|
||||
PNG_FORMAT_RGBA_COLORMAP
|
||||
PNG_FORMAT_ARGB_COLORMAP
|
||||
PNG_FORMAT_BGRA_COLORMAP
|
||||
PNG_FORMAT_ABGR_COLORMAP
|
||||
|
||||
PNG_IMAGE macros
|
||||
|
||||
|
@ -3887,9 +3909,9 @@ These are convenience macros to derive information from a png_image
|
|||
structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
|
||||
actual image sample values - either the entries in the color-map or the
|
||||
pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values
|
||||
for the pixels and will always return 1 after a call to
|
||||
png_image_{read,write}_colormap. The remaining macros return information
|
||||
about the rows in the image and the complete image.
|
||||
for the pixels and will always return 1 for color-mapped formats. The
|
||||
remaining macros return information about the rows in the image and the
|
||||
complete image.
|
||||
|
||||
NOTE: All the macros that take a png_image::format parameter are compile time
|
||||
constants if the format parameter is, itself, a constant. Therefore these
|
||||
|
@ -3897,46 +3919,39 @@ macros can be used in array declarations and case labels where required.
|
|||
Similarly the macros are also pre-processor constants (sizeof is not used) so
|
||||
they can be used in #if tests.
|
||||
|
||||
First the information about the samples.
|
||||
|
||||
PNG_IMAGE_SAMPLE_CHANNELS(fmt)
|
||||
Returns the total number of channels in a given format: 1..4
|
||||
|
||||
PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)
|
||||
Returns the size in bytes of a single component of a pixel or color-map
|
||||
entry (as appropriate) in the image.
|
||||
entry (as appropriate) in the image: 1 or 2.
|
||||
|
||||
PNG_IMAGE_SAMPLE_SIZE(fmt)
|
||||
This is the size of the sample data for one sample. If the image is
|
||||
color-mapped it is the size of one color-map entry (and image pixels are
|
||||
one byte in size), otherwise it is the size of one image pixel.
|
||||
|
||||
PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)
|
||||
The maximum size of the color-map required by the format expressed in a
|
||||
count of components. This can be used to compile-time allocate a
|
||||
color-map:
|
||||
|
||||
png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
|
||||
|
||||
png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
|
||||
|
||||
Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
|
||||
information from one of the png_image_begin_read_ APIs and dynamically
|
||||
allocate the required memory.
|
||||
|
||||
PNG_IMAGE_COLORMAP_SIZE(fmt)
|
||||
The size of the color-map required by the format; this is the size of the
|
||||
color-map buffer passed to the png_image_{read,write}_colormap APIs, it is
|
||||
color-map buffer passed to the png_image_{read,write}_colormap APIs. It is
|
||||
a fixed number determined by the format so can easily be allocated on the
|
||||
stack if necessary.
|
||||
|
||||
#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
|
||||
(PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
|
||||
/* The maximum size of the color-map required by the format expressed in a
|
||||
* count of components. This can be used to compile-time allocate a
|
||||
* color-map:
|
||||
*
|
||||
* png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
|
||||
*
|
||||
* png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
|
||||
*
|
||||
* Alternatively, use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
|
||||
* information from one of the png_image_begin_read_ APIs and dynamically
|
||||
* allocate the required memory.
|
||||
*/
|
||||
|
||||
|
||||
Corresponding information about the pixels
|
||||
|
||||
PNG_IMAGE_PIXEL_(test,fmt)
|
||||
|
||||
PNG_IMAGE_PIXEL_CHANNELS(fmt)
|
||||
The number of separate channels (components) in a pixel; 1 for a
|
||||
color-mapped image.
|
||||
|
@ -3962,19 +3977,54 @@ Information about the whole row, or whole image
|
|||
to start the next row on a 4-byte boundary.
|
||||
|
||||
PNG_IMAGE_BUFFER_SIZE(image, row_stride)
|
||||
Returns 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. This
|
||||
macro takes care of multiplying row_stride by PNG_IMAGE_PIXEL_COMONENT_SIZE
|
||||
when the image has 2-byte components.
|
||||
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.
|
||||
|
||||
PNG_IMAGE_SIZE(image)
|
||||
Return the size, in bytes, of the image in memory given just a png_image;
|
||||
the row stride is the minimum stride required for the image.
|
||||
|
||||
PNG_IMAGE_COLORMAP_SIZE(image)
|
||||
Return the size, in bytes, of the color-map of this image. If the image
|
||||
format is not a color-map format this will return a size sufficient for
|
||||
256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if
|
||||
you don't want to allocate a color-map in this case.
|
||||
|
||||
PNG_IMAGE_FLAG_*
|
||||
|
||||
Flags containing additional information about the image are held in
|
||||
the 'flags' field of png_image.
|
||||
|
||||
PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
|
||||
This indicates the the RGB values of the in-memory bitmap do not
|
||||
correspond to the red, green and blue end-points defined by sRGB.
|
||||
|
||||
PNG_IMAGE_FLAG_COLORMAP == 0x02
|
||||
The PNG is color-mapped. If this flag is set png_image_read_colormap
|
||||
can be used without further loss of image information. If it is not set
|
||||
png_image_read_colormap will cause significant loss if the image has any
|
||||
PNG_IMAGE_FLAG_FAST == 0x02
|
||||
On write emphasise speed over compression; the resultant PNG file will be
|
||||
larger but will be produced significantly faster, particular for large
|
||||
images. Do not use this option for images which will be distributed, only
|
||||
used it when producing intermediate files that will be read back in
|
||||
repeatedly. For a typical 24-bit image the option will double the read
|
||||
speed at the cost of increasing the image size by 25%, however for many
|
||||
more compressible images the PNG file can be 10 times larger with only a
|
||||
slight speed gain.
|
||||
|
||||
PNG_IMAGE_FLAG_16BIT_sRGB == 0x04
|
||||
On read if the image is a 16-bit per component image and there is no gAMA
|
||||
or sRGB chunk assume that the components are sRGB encoded. Notice that
|
||||
images output by the simplified API always have gamma information; setting
|
||||
this flag only affects the interpretation of 16-bit images from an
|
||||
external source. It is recommended that the application expose this flag
|
||||
to the user; the user can normally easily recognize the difference between
|
||||
linear and sRGB encoding. This flag has no effect on write - the data
|
||||
passed to the write APIs must have the correct encoding (as defined
|
||||
above.)
|
||||
|
||||
If the flag is not set (the default) input 16-bit per component data is
|
||||
assumed to be linear.
|
||||
|
||||
NOTE: the flag can only be set after the png_image_begin_read_ call,
|
||||
because that call initializes the 'flags' field.
|
||||
|
||||
READ APIs
|
||||
|
||||
|
@ -4856,7 +4906,7 @@ limits are now
|
|||
png_user_chunk_malloc_max 0 (unlimited) 8,000,000
|
||||
|
||||
The png_set_option() function (and the "options" member of the png struct) was
|
||||
added to libpng-1.5.15.
|
||||
added to libpng-1.5.15, with option PNG_ARM_NEON.
|
||||
|
||||
The library now supports a complete fixed point implementation and can
|
||||
thus be used on systems that have no floating point support or very
|
||||
|
@ -4998,9 +5048,9 @@ The signatures of many exported functions were changed, such that
|
|||
png_infop became png_inforp or png_const_inforp
|
||||
where "rp" indicates a "restricted pointer".
|
||||
|
||||
The support for FAR/far types has been eliminated and the definition of
|
||||
png_alloc_size_t is now controlled by a flag so that 'small size_t' systems
|
||||
can select it if necessary.
|
||||
Dropped support for 16-bit platforms. The support for FAR/far types has
|
||||
been eliminated and the definition of png_alloc_size_t is now controlled
|
||||
by a flag so that 'small size_t' systems can select it if necessary.
|
||||
|
||||
Error detection in some chunks has improved; in particular the iCCP chunk
|
||||
reader now does pretty complete validation of the basic format. Some bad
|
||||
|
@ -5092,6 +5142,11 @@ It can be set for testing debug or beta builds to ensure that they will compile
|
|||
when the build type is switched to RC or STABLE. In essence this overrides the
|
||||
PNG_LIBPNG_BUILD_BASE_TYPE definition which is not directly user controllable.
|
||||
|
||||
Starting with libpng-1.6.19, attempting to set an over-length PLTE chunk
|
||||
is an error. Previously this requirement of the PNG specification was not
|
||||
enforced, and the palette was always limited to 256 entries. An over-length
|
||||
PLTE chunk found in an input PNG is silently truncated.
|
||||
|
||||
XIII. Detecting libpng
|
||||
|
||||
The png_get_io_ptr() function has been present since libpng-0.88, has never
|
||||
|
@ -5245,10 +5300,12 @@ We prefer #ifdef and #ifndef to #if defined() and #if !defined()
|
|||
when there is only one macro being tested. We always use parentheses
|
||||
with "defined".
|
||||
|
||||
We prefer to express integers that are used as bit masks in hex format,
|
||||
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
|
||||
We express integer constants that are used as bit masks in hex format,
|
||||
with an even number of lower-case hex digits, and to make them unsigned
|
||||
(e.g., 0x00U, 0xffU, 0x0100U) and long if they are greater than 0x7fff
|
||||
(e.g., 0xffffUL).
|
||||
|
||||
We prefer to use underscores in variable names rather than camelCase, except
|
||||
We prefer to use underscores rather than camelCase in names, except
|
||||
for a few type names that we inherit from zlib.h.
|
||||
|
||||
We prefer "if (something != 0)" and "if (something == 0)"
|
||||
|
@ -5262,13 +5319,11 @@ Other rules can be inferred by inspecting the libpng source.
|
|||
|
||||
XVI. Y2K Compliance in libpng
|
||||
|
||||
July 23, 2015
|
||||
|
||||
Since the PNG Development group is an ad-hoc body, we can't make
|
||||
an official declaration.
|
||||
|
||||
This is your unofficial assurance that libpng from version 0.71 and
|
||||
upward through 1.6.18 are Y2K compliant. It is my belief that earlier
|
||||
upward through 1.6.19 are Y2K compliant. It is my belief that earlier
|
||||
versions were also Y2K compliant.
|
||||
|
||||
Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* png.c - location for general purpose libpng functions
|
||||
*
|
||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
|
@ -14,7 +14,7 @@
|
|||
#include "pngpriv.h"
|
||||
|
||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||
typedef png_libpng_version_1_6_18 Your_png_h_is_not_version_1_6_18;
|
||||
typedef png_libpng_version_1_6_19 Your_png_h_is_not_version_1_6_19;
|
||||
|
||||
/* 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
|
||||
|
@ -26,15 +26,20 @@ typedef png_libpng_version_1_6_18 Your_png_h_is_not_version_1_6_18;
|
|||
void PNGAPI
|
||||
png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
|
||||
{
|
||||
unsigned int nb = (unsigned int)num_bytes;
|
||||
|
||||
png_debug(1, "in png_set_sig_bytes");
|
||||
|
||||
if (png_ptr == NULL)
|
||||
return;
|
||||
|
||||
if (num_bytes > 8)
|
||||
if (num_bytes < 0)
|
||||
nb = 0;
|
||||
|
||||
if (nb > 8)
|
||||
png_error(png_ptr, "Too many bytes for PNG signature");
|
||||
|
||||
png_ptr->sig_bytes = (png_byte)((num_bytes < 0 ? 0 : num_bytes) & 0xff);
|
||||
png_ptr->sig_bytes = (png_byte)nb;
|
||||
}
|
||||
|
||||
/* Checks whether the supplied bytes match the PNG signature. We allow
|
||||
|
@ -413,6 +418,8 @@ png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
|
|||
free(info_ptr);
|
||||
info_ptr = png_voidcast(png_inforp, png_malloc_base(NULL,
|
||||
(sizeof *info_ptr)));
|
||||
if (info_ptr == NULL)
|
||||
return;
|
||||
*ptr_ptr = info_ptr;
|
||||
}
|
||||
|
||||
|
@ -664,19 +671,20 @@ png_init_io(png_structrp png_ptr, png_FILE_p fp)
|
|||
# endif
|
||||
|
||||
# ifdef PNG_SAVE_INT_32_SUPPORTED
|
||||
/* The png_save_int_32 function assumes integers are stored in two's
|
||||
* complement format. If this isn't the case, then this routine needs to
|
||||
* be modified to write data in two's complement format. Note that,
|
||||
* the following works correctly even if png_int_32 has more than 32 bits
|
||||
* (compare the more complex code required on read for sign extension.)
|
||||
/* PNG signed integers are saved in 32-bit 2's complement format. ANSI C-90
|
||||
* defines a cast of a signed integer to an unsigned integer either to preserve
|
||||
* the value, if it is positive, or to calculate:
|
||||
*
|
||||
* (UNSIGNED_MAX+1) + integer
|
||||
*
|
||||
* Where UNSIGNED_MAX is the appropriate maximum unsigned value, so when the
|
||||
* negative integral value is added the result will be an unsigned value
|
||||
* correspnding to the 2's complement representation.
|
||||
*/
|
||||
void PNGAPI
|
||||
png_save_int_32(png_bytep buf, png_int_32 i)
|
||||
{
|
||||
buf[0] = (png_byte)((i >> 24) & 0xff);
|
||||
buf[1] = (png_byte)((i >> 16) & 0xff);
|
||||
buf[2] = (png_byte)((i >> 8) & 0xff);
|
||||
buf[3] = (png_byte)(i & 0xff);
|
||||
png_save_uint_32(buf, i);
|
||||
}
|
||||
# endif
|
||||
|
||||
|
@ -722,6 +730,7 @@ png_convert_to_rfc1123_buffer(char out[29], png_const_timep ptime)
|
|||
APPEND(':');
|
||||
APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->second);
|
||||
APPEND_STRING(" +0000"); /* This reliably terminates the buffer */
|
||||
PNG_UNUSED (pos)
|
||||
|
||||
# undef APPEND
|
||||
# undef APPEND_NUMBER
|
||||
|
@ -766,16 +775,20 @@ png_get_copyright(png_const_structrp png_ptr)
|
|||
#else
|
||||
# ifdef __STDC__
|
||||
return PNG_STRING_NEWLINE \
|
||||
"libpng version 1.6.18 - July 23, 2015" PNG_STRING_NEWLINE \
|
||||
"libpng version 1.6.19+apng - November 12, 2015" PNG_STRING_NEWLINE \
|
||||
"Copyright (c) 1998-2015 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
|
||||
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
||||
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
||||
PNG_STRING_NEWLINE;
|
||||
PNG_STRING_NEWLINE \
|
||||
"Portions Copyright (c) 2006-2007 Andrew Smith" PNG_STRING_NEWLINE \
|
||||
"Portions Copyright (c) 2008-2015 Max Stepin" PNG_STRING_NEWLINE ;
|
||||
# else
|
||||
return "libpng version 1.6.18 - July 23, 2015\
|
||||
return "libpng version 1.6.19+apng - November 12, 2015\
|
||||
Copyright (c) 1998-2015 Glenn Randers-Pehrson\
|
||||
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.\
|
||||
Portions Copyright (c) 2006-2007 Andrew Smith\
|
||||
Portions Copyright (c) 2008-2015 Max Stepin";
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
@ -1703,7 +1716,6 @@ png_colorspace_set_chromaticities(png_const_structrp png_ptr,
|
|||
*/
|
||||
colorspace->flags |= PNG_COLORSPACE_INVALID;
|
||||
png_error(png_ptr, "internal error checking chromaticities");
|
||||
break;
|
||||
}
|
||||
|
||||
return 0; /* failed */
|
||||
|
@ -1731,7 +1743,6 @@ png_colorspace_set_endpoints(png_const_structrp png_ptr,
|
|||
default:
|
||||
colorspace->flags |= PNG_COLORSPACE_INVALID;
|
||||
png_error(png_ptr, "internal error checking chromaticities");
|
||||
break;
|
||||
}
|
||||
|
||||
return 0; /* failed */
|
||||
|
@ -2057,8 +2068,8 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||
temp = png_get_uint_32(profile+12); /* profile/device class */
|
||||
switch (temp)
|
||||
{
|
||||
case 0x73636E72: /* 'scnr' */
|
||||
case 0x6D6E7472: /* 'mntr' */
|
||||
case 0x73636e72: /* 'scnr' */
|
||||
case 0x6d6e7472: /* 'mntr' */
|
||||
case 0x70727472: /* 'prtr' */
|
||||
case 0x73706163: /* 'spac' */
|
||||
/* All supported */
|
||||
|
@ -2069,7 +2080,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||
"invalid embedded Abstract ICC profile");
|
||||
|
||||
case 0x6C696E6B: /* 'link' */
|
||||
case 0x6c696e6b: /* 'link' */
|
||||
/* DeviceLink profiles cannot be interpreted in a non-device specific
|
||||
* fashion, if an app uses the AToB0Tag in the profile the results are
|
||||
* undefined unless the result is sent to the intended device,
|
||||
|
@ -2079,7 +2090,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||
"unexpected DeviceLink ICC profile class");
|
||||
|
||||
case 0x6E6D636C: /* 'nmcl' */
|
||||
case 0x6e6d636c: /* 'nmcl' */
|
||||
/* A NamedColor profile is also device specific, however it doesn't
|
||||
* contain an AToB0 tag that is open to misinterpretation. Almost
|
||||
* certainly it will fail the tests below.
|
||||
|
@ -2105,8 +2116,8 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||
temp = png_get_uint_32(profile+20);
|
||||
switch (temp)
|
||||
{
|
||||
case 0x58595A20: /* 'XYZ ' */
|
||||
case 0x4C616220: /* 'Lab ' */
|
||||
case 0x58595a20: /* 'XYZ ' */
|
||||
case 0x4c616220: /* 'Lab ' */
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -2276,7 +2287,7 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
|||
}
|
||||
|
||||
/* Length *and* intent must match */
|
||||
if (length == png_sRGB_checks[i].length &&
|
||||
if (length == (png_uint_32) png_sRGB_checks[i].length &&
|
||||
intent == (png_uint_32) png_sRGB_checks[i].intent)
|
||||
{
|
||||
/* Now calculate the adler32 if not done already. */
|
||||
|
@ -3144,7 +3155,7 @@ png_ascii_from_fixed(png_const_structrp png_ptr, png_charp ascii,
|
|||
|
||||
/* Avoid overflow here on the minimum integer. */
|
||||
if (fp < 0)
|
||||
*ascii++ = 45, --size, num = -fp;
|
||||
*ascii++ = 45, num = -fp;
|
||||
else
|
||||
num = fp;
|
||||
|
||||
|
@ -3675,7 +3686,7 @@ png_exp(png_fixed_point x)
|
|||
if (x > 0 && x <= 0xfffff) /* Else overflow or zero (underflow) */
|
||||
{
|
||||
/* Obtain a 4-bit approximation */
|
||||
png_uint_32 e = png_32bit_exp[(x >> 12) & 0xf];
|
||||
png_uint_32 e = png_32bit_exp[(x >> 12) & 0x0f];
|
||||
|
||||
/* Incorporate the low 12 bits - these decrease the returned value by
|
||||
* multiplying by a number less than 1 if the bit is set. The multiplier
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* png.h - header file for PNG reference library
|
||||
*
|
||||
* libpng version 1.6.18, July 23, 2015
|
||||
* libpng version 1.6.19, November 12, 2015
|
||||
*
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
|
@ -12,234 +12,8 @@
|
|||
* Authors and maintainers:
|
||||
* 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.97, January 1998, through 1.6.18, July 23, 2015: Glenn
|
||||
* libpng versions 0.97, January 1998, through 1.6.19, November 12, 2015: Glenn
|
||||
* See also "Contributing Authors", below.
|
||||
*
|
||||
* Note about libpng version numbers:
|
||||
*
|
||||
* Due to various miscommunications, unforeseen code incompatibilities
|
||||
* and occasional factors outside the authors' control, version numbering
|
||||
* on the library has not always been consistent and straightforward.
|
||||
* The following table summarizes matters since version 0.89c, which was
|
||||
* the first widely used release:
|
||||
*
|
||||
* source png.h png.h shared-lib
|
||||
* version string int version
|
||||
* ------- ------ ----- ----------
|
||||
* 0.89c "1.0 beta 3" 0.89 89 1.0.89
|
||||
* 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90]
|
||||
* 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95]
|
||||
* 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96]
|
||||
* 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97]
|
||||
* 0.97c 0.97 97 2.0.97
|
||||
* 0.98 0.98 98 2.0.98
|
||||
* 0.99 0.99 98 2.0.99
|
||||
* 0.99a-m 0.99 99 2.0.99
|
||||
* 1.00 1.00 100 2.1.0 [100 should be 10000]
|
||||
* 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000]
|
||||
* 1.0.1 png.h string is 10001 2.1.0
|
||||
* 1.0.1a-e identical to the 10002 from here on, the shared library
|
||||
* 1.0.2 source version) 10002 is 2.V where V is the source code
|
||||
* 1.0.2a-b 10003 version, except as noted.
|
||||
* 1.0.3 10003
|
||||
* 1.0.3a-d 10004
|
||||
* 1.0.4 10004
|
||||
* 1.0.4a-f 10005
|
||||
* 1.0.5 (+ 2 patches) 10005
|
||||
* 1.0.5a-d 10006
|
||||
* 1.0.5e-r 10100 (not source compatible)
|
||||
* 1.0.5s-v 10006 (not binary compatible)
|
||||
* 1.0.6 (+ 3 patches) 10006 (still binary incompatible)
|
||||
* 1.0.6d-f 10007 (still binary incompatible)
|
||||
* 1.0.6g 10007
|
||||
* 1.0.6h 10007 10.6h (testing xy.z so-numbering)
|
||||
* 1.0.6i 10007 10.6i
|
||||
* 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0)
|
||||
* 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible)
|
||||
* 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
|
||||
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
|
||||
* 1.0.7 1 10007 (still compatible)
|
||||
* 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
|
||||
* 1.0.8rc1 1 10008 2.1.0.8rc1
|
||||
* 1.0.8 1 10008 2.1.0.8
|
||||
* 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
|
||||
* 1.0.9rc1 1 10009 2.1.0.9rc1
|
||||
* 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
|
||||
* 1.0.9rc2 1 10009 2.1.0.9rc2
|
||||
* 1.0.9 1 10009 2.1.0.9
|
||||
* 1.0.10beta1 1 10010 2.1.0.10beta1
|
||||
* 1.0.10rc1 1 10010 2.1.0.10rc1
|
||||
* 1.0.10 1 10010 2.1.0.10
|
||||
* 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
|
||||
* 1.0.11rc1 1 10011 2.1.0.11rc1
|
||||
* 1.0.11 1 10011 2.1.0.11
|
||||
* 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
|
||||
* 1.0.12rc1 2 10012 2.1.0.12rc1
|
||||
* 1.0.12 2 10012 2.1.0.12
|
||||
* 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned)
|
||||
* 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
|
||||
* 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
|
||||
* 1.2.0rc1 3 10200 3.1.2.0rc1
|
||||
* 1.2.0 3 10200 3.1.2.0
|
||||
* 1.2.1beta1-4 3 10201 3.1.2.1beta1-4
|
||||
* 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
|
||||
* 1.2.1 3 10201 3.1.2.1
|
||||
* 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
|
||||
* 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
|
||||
* 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
|
||||
* 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
|
||||
* 1.0.13 10 10013 10.so.0.1.0.13
|
||||
* 1.2.2 12 10202 12.so.0.1.2.2
|
||||
* 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
|
||||
* 1.2.3 12 10203 12.so.0.1.2.3
|
||||
* 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
|
||||
* 1.0.14rc1 13 10014 10.so.0.1.0.14rc1
|
||||
* 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
|
||||
* 1.0.14 10 10014 10.so.0.1.0.14
|
||||
* 1.2.4 13 10204 12.so.0.1.2.4
|
||||
* 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
|
||||
* 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3
|
||||
* 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3
|
||||
* 1.0.15 10 10015 10.so.0.1.0.15
|
||||
* 1.2.5 13 10205 12.so.0.1.2.5
|
||||
* 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
|
||||
* 1.0.16 10 10016 10.so.0.1.0.16
|
||||
* 1.2.6 13 10206 12.so.0.1.2.6
|
||||
* 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
|
||||
* 1.0.17rc1 10 10017 12.so.0.1.0.17rc1
|
||||
* 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
|
||||
* 1.0.17 10 10017 12.so.0.1.0.17
|
||||
* 1.2.7 13 10207 12.so.0.1.2.7
|
||||
* 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
|
||||
* 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5
|
||||
* 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
|
||||
* 1.0.18 10 10018 12.so.0.1.0.18
|
||||
* 1.2.8 13 10208 12.so.0.1.2.8
|
||||
* 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
|
||||
* 1.2.9beta4-11 13 10209 12.so.0.9[.0]
|
||||
* 1.2.9rc1 13 10209 12.so.0.9[.0]
|
||||
* 1.2.9 13 10209 12.so.0.9[.0]
|
||||
* 1.2.10beta1-7 13 10210 12.so.0.10[.0]
|
||||
* 1.2.10rc1-2 13 10210 12.so.0.10[.0]
|
||||
* 1.2.10 13 10210 12.so.0.10[.0]
|
||||
* 1.4.0beta1-5 14 10400 14.so.0.0[.0]
|
||||
* 1.2.11beta1-4 13 10211 12.so.0.11[.0]
|
||||
* 1.4.0beta7-8 14 10400 14.so.0.0[.0]
|
||||
* 1.2.11 13 10211 12.so.0.11[.0]
|
||||
* 1.2.12 13 10212 12.so.0.12[.0]
|
||||
* 1.4.0beta9-14 14 10400 14.so.0.0[.0]
|
||||
* 1.2.13 13 10213 12.so.0.13[.0]
|
||||
* 1.4.0beta15-36 14 10400 14.so.0.0[.0]
|
||||
* 1.4.0beta37-87 14 10400 14.so.14.0[.0]
|
||||
* 1.4.0rc01 14 10400 14.so.14.0[.0]
|
||||
* 1.4.0beta88-109 14 10400 14.so.14.0[.0]
|
||||
* 1.4.0rc02-08 14 10400 14.so.14.0[.0]
|
||||
* 1.4.0 14 10400 14.so.14.0[.0]
|
||||
* 1.4.1beta01-03 14 10401 14.so.14.1[.0]
|
||||
* 1.4.1rc01 14 10401 14.so.14.1[.0]
|
||||
* 1.4.1beta04-12 14 10401 14.so.14.1[.0]
|
||||
* 1.4.1 14 10401 14.so.14.1[.0]
|
||||
* 1.4.2 14 10402 14.so.14.2[.0]
|
||||
* 1.4.3 14 10403 14.so.14.3[.0]
|
||||
* 1.4.4 14 10404 14.so.14.4[.0]
|
||||
* 1.5.0beta01-58 15 10500 15.so.15.0[.0]
|
||||
* 1.5.0rc01-07 15 10500 15.so.15.0[.0]
|
||||
* 1.5.0 15 10500 15.so.15.0[.0]
|
||||
* 1.5.1beta01-11 15 10501 15.so.15.1[.0]
|
||||
* 1.5.1rc01-02 15 10501 15.so.15.1[.0]
|
||||
* 1.5.1 15 10501 15.so.15.1[.0]
|
||||
* 1.5.2beta01-03 15 10502 15.so.15.2[.0]
|
||||
* 1.5.2rc01-03 15 10502 15.so.15.2[.0]
|
||||
* 1.5.2 15 10502 15.so.15.2[.0]
|
||||
* 1.5.3beta01-10 15 10503 15.so.15.3[.0]
|
||||
* 1.5.3rc01-02 15 10503 15.so.15.3[.0]
|
||||
* 1.5.3beta11 15 10503 15.so.15.3[.0]
|
||||
* 1.5.3 [omitted]
|
||||
* 1.5.4beta01-08 15 10504 15.so.15.4[.0]
|
||||
* 1.5.4rc01 15 10504 15.so.15.4[.0]
|
||||
* 1.5.4 15 10504 15.so.15.4[.0]
|
||||
* 1.5.5beta01-08 15 10505 15.so.15.5[.0]
|
||||
* 1.5.5rc01 15 10505 15.so.15.5[.0]
|
||||
* 1.5.5 15 10505 15.so.15.5[.0]
|
||||
* 1.5.6beta01-07 15 10506 15.so.15.6[.0]
|
||||
* 1.5.6rc01-03 15 10506 15.so.15.6[.0]
|
||||
* 1.5.6 15 10506 15.so.15.6[.0]
|
||||
* 1.5.7beta01-05 15 10507 15.so.15.7[.0]
|
||||
* 1.5.7rc01-03 15 10507 15.so.15.7[.0]
|
||||
* 1.5.7 15 10507 15.so.15.7[.0]
|
||||
* 1.6.0beta01-40 16 10600 16.so.16.0[.0]
|
||||
* 1.6.0rc01-08 16 10600 16.so.16.0[.0]
|
||||
* 1.6.0 16 10600 16.so.16.0[.0]
|
||||
* 1.6.1beta01-09 16 10601 16.so.16.1[.0]
|
||||
* 1.6.1rc01 16 10601 16.so.16.1[.0]
|
||||
* 1.6.1 16 10601 16.so.16.1[.0]
|
||||
* 1.6.2beta01 16 10602 16.so.16.2[.0]
|
||||
* 1.6.2rc01-06 16 10602 16.so.16.2[.0]
|
||||
* 1.6.2 16 10602 16.so.16.2[.0]
|
||||
* 1.6.3beta01-11 16 10603 16.so.16.3[.0]
|
||||
* 1.6.3rc01 16 10603 16.so.16.3[.0]
|
||||
* 1.6.3 16 10603 16.so.16.3[.0]
|
||||
* 1.6.4beta01-02 16 10604 16.so.16.4[.0]
|
||||
* 1.6.4rc01 16 10604 16.so.16.4[.0]
|
||||
* 1.6.4 16 10604 16.so.16.4[.0]
|
||||
* 1.6.5 16 10605 16.so.16.5[.0]
|
||||
* 1.6.6 16 10606 16.so.16.6[.0]
|
||||
* 1.6.7beta01-04 16 10607 16.so.16.7[.0]
|
||||
* 1.6.7rc01-03 16 10607 16.so.16.7[.0]
|
||||
* 1.6.7 16 10607 16.so.16.7[.0]
|
||||
* 1.6.8beta01-02 16 10608 16.so.16.8[.0]
|
||||
* 1.6.8rc01-02 16 10608 16.so.16.8[.0]
|
||||
* 1.6.8 16 10608 16.so.16.8[.0]
|
||||
* 1.6.9beta01-04 16 10609 16.so.16.9[.0]
|
||||
* 1.6.9rc01-02 16 10609 16.so.16.9[.0]
|
||||
* 1.6.9 16 10609 16.so.16.9[.0]
|
||||
* 1.6.10beta01-03 16 10610 16.so.16.10[.0]
|
||||
* 1.6.10rc01-03 16 10610 16.so.16.10[.0]
|
||||
* 1.6.10 16 10610 16.so.16.10[.0]
|
||||
* 1.6.11beta01-06 16 10611 16.so.16.11[.0]
|
||||
* 1.6.11rc01-02 16 10611 16.so.16.11[.0]
|
||||
* 1.6.11 16 10611 16.so.16.11[.0]
|
||||
* 1.6.12rc01-03 16 10612 16.so.16.12[.0]
|
||||
* 1.6.12 16 10612 16.so.16.12[.0]
|
||||
* 1.6.13beta01-04 16 10613 16.so.16.13[.0]
|
||||
* 1.6.13rc01-02 16 10613 16.so.16.13[.0]
|
||||
* 1.6.13 16 10613 16.so.16.13[.0]
|
||||
* 1.6.14beta01-07 16 10614 16.so.16.14[.0]
|
||||
* 1.6.14rc01-02 16 10614 16.so.16.14[.0]
|
||||
* 1.6.14 16 10614 16.so.16.14[.0]
|
||||
* 1.6.15beta01-08 16 10615 16.so.16.15[.0]
|
||||
* 1.6.15rc01-03 16 10615 16.so.16.15[.0]
|
||||
* 1.6.15 16 10615 16.so.16.15[.0]
|
||||
* 1.6.16beta01-03 16 10616 16.so.16.16[.0]
|
||||
* 1.6.16rc01-02 16 10616 16.so.16.16[.0]
|
||||
* 1.6.16 16 10616 16.so.16.16[.0]
|
||||
* 1.6.17beta01-06 16 10617 16.so.16.17[.0]
|
||||
* 1.6.17rc01-06 16 10617 16.so.16.17[.0]
|
||||
* 1.6.17 16 10617 16.so.16.17[.0]
|
||||
* 1.6.18beta01-09 16 10618 16.so.16.18[.0]
|
||||
* 1.6.18rc01-03 16 10618 16.so.16.18[.0]
|
||||
* 1.6.18 16 10618 16.so.16.18[.0]
|
||||
*
|
||||
* Henceforth the source version will match the shared-library major
|
||||
* and minor numbers; the shared-library major version number will be
|
||||
* used for changes in backward compatibility, as it is intended. The
|
||||
* PNG_LIBPNG_VER macro, which is not used within libpng but is available
|
||||
* for applications, is an unsigned integer of the form xyyzz corresponding
|
||||
* to the source version x.y.z (leading zeros in y and z). Beta versions
|
||||
* were given the previous public release number plus a letter, until
|
||||
* version 1.0.6j; from then on they were given the upcoming public
|
||||
* release number plus "betaNN" or "rcNN".
|
||||
*
|
||||
* Binary incompatibility exists only when applications make direct access
|
||||
* to the info_ptr or png_ptr members through png.h, and the compiled
|
||||
* application is loaded with a different version of the library.
|
||||
*
|
||||
* DLLNUM will change each time there are forward or backward changes
|
||||
* in binary compatibility (e.g., when a new feature is added).
|
||||
*
|
||||
* See libpng-manual.txt or libpng.3 for more information. The PNG
|
||||
* specification is available as a W3C Recommendation and as an ISO
|
||||
* Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -247,25 +21,27 @@
|
|||
*
|
||||
* If you modify libpng you may insert additional notices immediately following
|
||||
* this sentence.
|
||||
*
|
||||
*
|
||||
* pnglibconf.h and moz.build are distributed under the Mozilla Public License,
|
||||
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
||||
* obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* This modified version of libpng code adds animated PNG support. This code is
|
||||
* This modified version of libpng code adds animated PNG support and is
|
||||
* released under the libpng license described below. The modifications are
|
||||
* Copyright (c) 2006-2007 Andrew Smith, Copyright (c) 2008-2015 Max Stepin,
|
||||
* and can be identified by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
* and are delimited by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
|
||||
* surrounding them in the modified libpng source files.
|
||||
*
|
||||
* This code is released under the libpng license.
|
||||
*
|
||||
* libpng versions 1.0.7, July 1, 2000, through 1.6.18, July 23, 2015, are
|
||||
* Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are
|
||||
* distributed according to the same disclaimer and license as libpng-1.0.6
|
||||
* with the following individuals added to the list of Contributing Authors:
|
||||
* libpng versions 1.0.7, July 1, 2000, through 1.6.19, November 12, 2015, are
|
||||
* Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are
|
||||
* 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
|
||||
* added to the list of Contributing Authors:
|
||||
*
|
||||
* Simon-Pierre Cadieux
|
||||
* Eric S. Raymond
|
||||
* Mans Rullgard
|
||||
* Cosmin Truta
|
||||
* Gilles Vollant
|
||||
|
@ -281,19 +57,20 @@
|
|||
* the user.
|
||||
*
|
||||
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, and are distributed according
|
||||
* to the same disclaimer and license as libpng-0.96, with the following
|
||||
* individuals added to the list of Contributing Authors:
|
||||
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||
* libpng-0.96, and are distributed according to the same disclaimer and
|
||||
* license as libpng-0.96, with the following individuals added to the list
|
||||
* of Contributing Authors:
|
||||
*
|
||||
* Tom Lane
|
||||
* Glenn Randers-Pehrson
|
||||
* Eric S. Raymond
|
||||
* Willem van Schaik
|
||||
*
|
||||
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||
* Copyright (c) 1996-1997 Andreas Dilger, and are
|
||||
* distributed according to the same disclaimer and license as libpng-0.88,
|
||||
* with the following individuals added to the list of Contributing Authors:
|
||||
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||
* and are distributed according to the same disclaimer and license as
|
||||
* libpng-0.88, with the following individuals added to the list of
|
||||
* Contributing Authors:
|
||||
*
|
||||
* John Bowler
|
||||
* Kevin Bracey
|
||||
|
@ -339,6 +116,8 @@
|
|||
* supporting the PNG file format in commercial products. If you use this
|
||||
* source code in a product, acknowledgment is not required but would be
|
||||
* appreciated.
|
||||
*
|
||||
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -365,17 +144,92 @@
|
|||
* Thanks to Frank J. T. Wojcik for helping with the documentation.
|
||||
*/
|
||||
|
||||
/* Note about libpng version numbers:
|
||||
*
|
||||
* Due to various miscommunications, unforeseen code incompatibilities
|
||||
* and occasional factors outside the authors' control, version numbering
|
||||
* on the library has not always been consistent and straightforward.
|
||||
* The following table summarizes matters since version 0.89c, which was
|
||||
* the first widely used release:
|
||||
*
|
||||
* source png.h png.h shared-lib
|
||||
* version string int version
|
||||
* ------- ------ ----- ----------
|
||||
* 0.89c "1.0 beta 3" 0.89 89 1.0.89
|
||||
* 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90]
|
||||
* 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95]
|
||||
* 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96]
|
||||
* 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97]
|
||||
* 0.97c 0.97 97 2.0.97
|
||||
* 0.98 0.98 98 2.0.98
|
||||
* 0.99 0.99 98 2.0.99
|
||||
* 0.99a-m 0.99 99 2.0.99
|
||||
* 1.00 1.00 100 2.1.0 [100 should be 10000]
|
||||
* 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000]
|
||||
* 1.0.1 png.h string is 10001 2.1.0
|
||||
* 1.0.1a-e identical to the 10002 from here on, the shared library
|
||||
* 1.0.2 source version) 10002 is 2.V where V is the source code
|
||||
* 1.0.2a-b 10003 version, except as noted.
|
||||
* 1.0.3 10003
|
||||
* 1.0.3a-d 10004
|
||||
* 1.0.4 10004
|
||||
* 1.0.4a-f 10005
|
||||
* 1.0.5 (+ 2 patches) 10005
|
||||
* 1.0.5a-d 10006
|
||||
* 1.0.5e-r 10100 (not source compatible)
|
||||
* 1.0.5s-v 10006 (not binary compatible)
|
||||
* 1.0.6 (+ 3 patches) 10006 (still binary incompatible)
|
||||
* 1.0.6d-f 10007 (still binary incompatible)
|
||||
* 1.0.6g 10007
|
||||
* 1.0.6h 10007 10.6h (testing xy.z so-numbering)
|
||||
* 1.0.6i 10007 10.6i
|
||||
* 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0)
|
||||
* 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible)
|
||||
* 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
|
||||
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
|
||||
* 1.0.7 1 10007 (still compatible)
|
||||
* ...
|
||||
* 1.0.19 10 10019 10.so.0.19[.0]
|
||||
* ...
|
||||
* 1.2.53 13 10253 12.so.0.53[.0]
|
||||
* ...
|
||||
* 1.5.23 15 10523 15.so.15.23[.0]
|
||||
* ...
|
||||
* 1.6.19 16 10619 16.so.16.19[.0]
|
||||
*
|
||||
* Henceforth the source version will match the shared-library major
|
||||
* and minor numbers; the shared-library major version number will be
|
||||
* used for changes in backward compatibility, as it is intended. The
|
||||
* PNG_LIBPNG_VER macro, which is not used within libpng but is available
|
||||
* for applications, is an unsigned integer of the form xyyzz corresponding
|
||||
* to the source version x.y.z (leading zeros in y and z). Beta versions
|
||||
* were given the previous public release number plus a letter, until
|
||||
* version 1.0.6j; from then on they were given the upcoming public
|
||||
* release number plus "betaNN" or "rcNN".
|
||||
*
|
||||
* Binary incompatibility exists only when applications make direct access
|
||||
* to the info_ptr or png_ptr members through png.h, and the compiled
|
||||
* application is loaded with a different version of the library.
|
||||
*
|
||||
* DLLNUM will change each time there are forward or backward changes
|
||||
* in binary compatibility (e.g., when a new feature is added).
|
||||
*
|
||||
* See libpng.txt or libpng.3 for more information. The PNG specification
|
||||
* is available as a W3C Recommendation and as an ISO Specification,
|
||||
* <http://www.w3.org/TR/2003/REC-PNG-20031110/
|
||||
*/
|
||||
|
||||
/*
|
||||
* Y2K compliance in libpng:
|
||||
* =========================
|
||||
*
|
||||
* July 23, 2015
|
||||
* November 12, 2015
|
||||
*
|
||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||
* an official declaration.
|
||||
*
|
||||
* This is your unofficial assurance that libpng from version 0.71 and
|
||||
* upward through 1.6.18 are Y2K compliant. It is my belief that
|
||||
* upward through 1.6.19 are Y2K compliant. It is my belief that
|
||||
* earlier versions were also Y2K compliant.
|
||||
*
|
||||
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||
|
@ -437,9 +291,9 @@
|
|||
*/
|
||||
|
||||
/* Version information for png.h - this should match the version in png.c */
|
||||
#define PNG_LIBPNG_VER_STRING "1.6.18"
|
||||
#define PNG_LIBPNG_VER_STRING "1.6.19+apng"
|
||||
#define PNG_HEADER_VERSION_STRING \
|
||||
" libpng version 1.6.18 - July 23, 2015\n"
|
||||
" libpng version 1.6.19+apng - November 12, 2015\n"
|
||||
|
||||
#define PNG_LIBPNG_VER_SONUM 16
|
||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||
|
@ -447,7 +301,7 @@
|
|||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||
#define PNG_LIBPNG_VER_MAJOR 1
|
||||
#define PNG_LIBPNG_VER_MINOR 6
|
||||
#define PNG_LIBPNG_VER_RELEASE 18
|
||||
#define PNG_LIBPNG_VER_RELEASE 19
|
||||
|
||||
/* This should match the numeric part of the final component of
|
||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
||||
|
@ -478,7 +332,7 @@
|
|||
* 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
|
||||
*/
|
||||
#define PNG_LIBPNG_VER 10618 /* 1.6.18 */
|
||||
#define PNG_LIBPNG_VER 10619 /* 1.6.19 */
|
||||
|
||||
/* Library configuration: these options cannot be changed after
|
||||
* the library has been built.
|
||||
|
@ -539,17 +393,22 @@ extern "C" {
|
|||
|
||||
/* This file is arranged in several sections:
|
||||
*
|
||||
* 1. Any configuration options that can be specified by for the application
|
||||
* 1. [omitted]
|
||||
* 2. Any configuration options that can be specified by for the application
|
||||
* code when it is built. (Build time configuration is in pnglibconf.h)
|
||||
* 2. Type definitions (base types are defined in pngconf.h), structure
|
||||
* 3. Type definitions (base types are defined in pngconf.h), structure
|
||||
* definitions.
|
||||
* 3. Exported library functions.
|
||||
* 4. Simplified API.
|
||||
* 4. Exported library functions.
|
||||
* 5. Simplified API.
|
||||
* 6. Implementation options.
|
||||
*
|
||||
* The library source code has additional files (principally pngpriv.h) that
|
||||
* allow configuration of the library.
|
||||
*/
|
||||
/* Section 1: run time configuration
|
||||
|
||||
/* Section 1: [omitted] */
|
||||
|
||||
/* Section 2: run time configuration
|
||||
* See pnglibconf.h for build time configuration
|
||||
*
|
||||
* Run time configuration allows the application to choose between
|
||||
|
@ -579,7 +438,7 @@ extern "C" {
|
|||
* Otherwise the calls are mapped to png_error.
|
||||
*/
|
||||
|
||||
/* Section 2: type definitions, including structures and compile time
|
||||
/* Section 3: type definitions, including structures and compile time
|
||||
* constants.
|
||||
* See pngconf.h for base types that vary by machine/system
|
||||
*/
|
||||
|
@ -598,7 +457,7 @@ extern "C" {
|
|||
/* This triggers a compiler error in png.c, if png.c and png.h
|
||||
* do not agree upon the version number.
|
||||
*/
|
||||
typedef char* png_libpng_version_1_6_18;
|
||||
typedef char* png_libpng_version_1_6_19;
|
||||
|
||||
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
||||
*
|
||||
|
@ -914,7 +773,9 @@ typedef png_unknown_chunk * * png_unknown_chunkpp;
|
|||
#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
|
||||
#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
|
||||
#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
|
||||
#if INT_MAX >= 0x8000 /* else this might break */
|
||||
#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
|
||||
#endif
|
||||
#ifdef PNG_APNG_SUPPORTED
|
||||
#define PNG_INFO_acTL 0x10000
|
||||
#define PNG_INFO_fcTL 0x20000
|
||||
|
@ -1026,7 +887,9 @@ PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
|
|||
#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */
|
||||
/* Added to libpng-1.5.4 */
|
||||
#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */
|
||||
#if INT_MAX >= 0x8000 /* else this might break */
|
||||
#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */
|
||||
#endif
|
||||
|
||||
/* Flags for MNG supported features */
|
||||
#define PNG_FLAG_MNG_EMPTY_PLTE 0x01
|
||||
|
@ -1043,7 +906,7 @@ typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
|
|||
png_alloc_size_t));
|
||||
typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
|
||||
|
||||
/* Section 3: exported functions
|
||||
/* Section 4: exported functions
|
||||
* Here are the function definitions most commonly used. This is not
|
||||
* the place to find out how to use libpng. See libpng-manual.txt for the
|
||||
* full explanation, see example.c for the summary. This just provides
|
||||
|
@ -1416,13 +1279,13 @@ PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr));
|
|||
#endif
|
||||
|
||||
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
|
||||
/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
|
||||
PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler,
|
||||
int flags));
|
||||
/* The values of the PNG_FILLER_ defines should NOT be changed */
|
||||
# define PNG_FILLER_BEFORE 0
|
||||
# define PNG_FILLER_AFTER 1
|
||||
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
|
||||
/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
|
||||
PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr,
|
||||
png_uint_32 filler, int flags));
|
||||
#endif /* READ_FILLER || WRITE_FILLER */
|
||||
|
@ -2747,7 +2610,7 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
|||
|
||||
# define PNG_get_int_32(buf) \
|
||||
((png_int_32)((*(buf) & 0x80) \
|
||||
? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \
|
||||
? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \
|
||||
: (png_int_32)png_get_uint_32(buf)))
|
||||
|
||||
/* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h,
|
||||
|
@ -2767,10 +2630,17 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \
|
||||
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||
PNG_EXPORT(242, void, png_set_check_for_invalid_index,
|
||||
(png_structrp png_ptr, int allowed));
|
||||
# ifdef PNG_GET_PALETTE_MAX_SUPPORTED
|
||||
PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
|
||||
png_const_infop info_ptr));
|
||||
# endif
|
||||
#endif /* CHECK_FOR_INVALID_INDEX */
|
||||
|
||||
/*******************************************************************************
|
||||
* SIMPLIFIED API
|
||||
* Section 5: SIMPLIFIED API
|
||||
*******************************************************************************
|
||||
*
|
||||
* Please read the documentation in libpng-manual.txt (TODO: write said
|
||||
|
@ -2815,6 +2685,9 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
|||
* when it is being read or defines the in-memory format of an image that you
|
||||
* need to write:
|
||||
*/
|
||||
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \
|
||||
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||
|
||||
#define PNG_IMAGE_VERSION 1
|
||||
|
||||
typedef struct png_control *png_controlp;
|
||||
|
@ -2914,7 +2787,7 @@ typedef struct
|
|||
* called to read or write the color-map and set the format correctly for the
|
||||
* image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
|
||||
*
|
||||
* NOTE: libpng can be built with particular features disabled, if you see
|
||||
* NOTE: libpng can be built with particular features disabled. If you see
|
||||
* compiler errors because the definition of one of the following flags has been
|
||||
* compiled out it is because libpng does not have the required support. It is
|
||||
* possible, however, for the libpng configuration to enable the format on just
|
||||
|
@ -2926,7 +2799,7 @@ typedef struct
|
|||
*/
|
||||
#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */
|
||||
#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */
|
||||
#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2 byte channels else 1 byte */
|
||||
#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2-byte channels else 1-byte */
|
||||
#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */
|
||||
|
||||
#ifdef PNG_FORMAT_BGR_SUPPORTED
|
||||
|
@ -3226,17 +3099,8 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
|||
******************************************************************************/
|
||||
#endif /* SIMPLIFIED_{READ|WRITE} */
|
||||
|
||||
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||
PNG_EXPORT(242, void, png_set_check_for_invalid_index,
|
||||
(png_structrp png_ptr, int allowed));
|
||||
# ifdef PNG_GET_PALETTE_MAX_SUPPORTED
|
||||
PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
|
||||
png_const_infop info_ptr));
|
||||
# endif
|
||||
#endif /* CHECK_FOR_INVALID_INDEX */
|
||||
|
||||
/*******************************************************************************
|
||||
* IMPLEMENTATION OPTIONS
|
||||
* Section 6: IMPLEMENTATION OPTIONS
|
||||
*******************************************************************************
|
||||
*
|
||||
* Support for arbitrary implementation-specific optimizations. The API allows
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* pngconf.h - machine configurable file for libpng
|
||||
*
|
||||
* libpng version 1.6.18, July 23, 2015
|
||||
* libpng version 1.6.19, July 23, 2015
|
||||
*
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
|
@ -63,7 +63,7 @@
|
|||
*/
|
||||
#define PNG_CONST const /* backward compatibility only */
|
||||
|
||||
/* This controls optimization of the reading of 16 and 32 bit values
|
||||
/* This controls optimization of the reading of 16-bit and 32-bit values
|
||||
* from PNG files. It can be set on a per-app-file basis - it
|
||||
* just changes whether a macro is used when the function is called.
|
||||
* The library builder sets the default; if read functions are not
|
||||
|
@ -480,7 +480,7 @@
|
|||
#if CHAR_BIT == 8 && UCHAR_MAX == 255
|
||||
typedef unsigned char png_byte;
|
||||
#else
|
||||
# error "libpng requires 8 bit bytes"
|
||||
# error "libpng requires 8-bit bytes"
|
||||
#endif
|
||||
|
||||
#if INT_MIN == -32768 && INT_MAX == 32767
|
||||
|
@ -488,7 +488,7 @@
|
|||
#elif SHRT_MIN == -32768 && SHRT_MAX == 32767
|
||||
typedef short png_int_16;
|
||||
#else
|
||||
# error "libpng requires a signed 16 bit type"
|
||||
# error "libpng requires a signed 16-bit type"
|
||||
#endif
|
||||
|
||||
#if UINT_MAX == 65535
|
||||
|
@ -496,7 +496,7 @@
|
|||
#elif USHRT_MAX == 65535
|
||||
typedef unsigned short png_uint_16;
|
||||
#else
|
||||
# error "libpng requires an unsigned 16 bit type"
|
||||
# error "libpng requires an unsigned 16-bit type"
|
||||
#endif
|
||||
|
||||
#if INT_MIN < -2147483646 && INT_MAX > 2147483646
|
||||
|
@ -504,7 +504,7 @@
|
|||
#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
|
||||
typedef long int png_int_32;
|
||||
#else
|
||||
# error "libpng requires a signed 32 bit (or more) type"
|
||||
# error "libpng requires a signed 32-bit (or more) type"
|
||||
#endif
|
||||
|
||||
#if UINT_MAX > 4294967294
|
||||
|
@ -512,7 +512,7 @@
|
|||
#elif ULONG_MAX > 4294967294
|
||||
typedef unsigned long int png_uint_32;
|
||||
#else
|
||||
# error "libpng requires an unsigned 32 bit (or more) type"
|
||||
# error "libpng requires an unsigned 32-bit (or more) type"
|
||||
#endif
|
||||
|
||||
/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
|
||||
|
|
|
@ -710,7 +710,7 @@ png_push_read_IDAT(png_structrp png_ptr)
|
|||
* are of different types and we don't know which variable has the fewest
|
||||
* bits. Carefully select the smaller and cast it to the type of the
|
||||
* larger - this cannot overflow. Do not cast in the following test - it
|
||||
* will break on either 16 or 64 bit platforms.
|
||||
* will break on either 16-bit or 64-bit platforms.
|
||||
*/
|
||||
if (idat_size < save_size)
|
||||
save_size = (png_size_t)idat_size;
|
||||
|
|
|
@ -579,10 +579,6 @@
|
|||
#define PNG_STRUCT_PNG 0x0001
|
||||
#define PNG_STRUCT_INFO 0x0002
|
||||
|
||||
/* Scaling factor for filter heuristic weighting calculations */
|
||||
#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
|
||||
#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
|
||||
|
||||
/* Flags for the png_ptr->flags rather than declaring a byte for each one */
|
||||
#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001
|
||||
#define PNG_FLAG_ZSTREAM_INITIALIZED 0x0002 /* Added to libpng-1.6.0 */
|
||||
|
@ -673,7 +669,7 @@
|
|||
/* The fixed point conversion performs range checking and evaluates
|
||||
* its argument multiple times, so must be used with care. The
|
||||
* range checking uses the PNG specification values for a signed
|
||||
* 32 bit fixed point value except that the values are deliberately
|
||||
* 32-bit fixed point value except that the values are deliberately
|
||||
* rounded-to-zero to an integral value - 21474 (21474.83 is roughly
|
||||
* (2^31-1) * 100000). 's' is a string that describes the value being
|
||||
* converted.
|
||||
|
@ -830,7 +826,7 @@
|
|||
*/
|
||||
#endif
|
||||
|
||||
/* This is used for 16 bit gamma tables -- only the top level pointers are
|
||||
/* This is used for 16-bit gamma tables -- only the top level pointers are
|
||||
* const; this could be changed:
|
||||
*/
|
||||
typedef const png_uint_16p * png_const_uint_16pp;
|
||||
|
|
|
@ -1763,10 +1763,11 @@ decode_gamma(png_image_read_control *display, png_uint_32 value, int encoding)
|
|||
value *= 257;
|
||||
break;
|
||||
|
||||
#ifdef __GNUC__
|
||||
default:
|
||||
png_error(display->image->opaque->png_ptr,
|
||||
"unexpected encoding (internal error)");
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
return value;
|
||||
|
@ -2927,10 +2928,6 @@ png_image_read_colormap(png_voidp argument)
|
|||
|
||||
switch (data_encoding)
|
||||
{
|
||||
default:
|
||||
png_error(png_ptr, "bad data option (internal error)");
|
||||
break;
|
||||
|
||||
case P_sRGB:
|
||||
/* Change to 8-bit sRGB */
|
||||
png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, PNG_GAMMA_sRGB);
|
||||
|
@ -2940,6 +2937,11 @@ png_image_read_colormap(png_voidp argument)
|
|||
if (png_ptr->bit_depth > 8)
|
||||
png_set_scale_16(png_ptr);
|
||||
break;
|
||||
|
||||
#ifdef __GNUC__
|
||||
default:
|
||||
png_error(png_ptr, "bad data option (internal error)");
|
||||
#endif
|
||||
}
|
||||
|
||||
if (cmap_entries > 256 || cmap_entries > image->colormap_entries)
|
||||
|
@ -3490,10 +3492,6 @@ png_image_read_background(png_voidp argument)
|
|||
*/
|
||||
switch (info_ptr->bit_depth)
|
||||
{
|
||||
default:
|
||||
png_error(png_ptr, "unexpected bit depth");
|
||||
break;
|
||||
|
||||
case 8:
|
||||
/* 8-bit sRGB gray values with an alpha channel; the alpha channel is
|
||||
* to be removed by composing on a background: either the row if
|
||||
|
@ -3711,6 +3709,11 @@ png_image_read_background(png_voidp argument)
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef __GNUC__
|
||||
default:
|
||||
png_error(png_ptr, "unexpected bit depth");
|
||||
#endif
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* reads from a file pointer. Note that this routine sometimes gets called
|
||||
* with very small lengths, so you should implement some kind of simple
|
||||
* buffering if you are using unbuffered reads. This should never be asked
|
||||
* to read more than 64K on a 16 bit machine.
|
||||
* to read more than 64K on a 16-bit machine.
|
||||
*/
|
||||
void /* PRIVATE */
|
||||
png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||
*
|
||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
|
@ -976,7 +976,6 @@ png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
|
|||
|
||||
default:
|
||||
png_error(png_ptr, "invalid error action to rgb_to_gray");
|
||||
break;
|
||||
}
|
||||
|
||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
|
@ -1997,7 +1996,7 @@ png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
|
|||
# endif
|
||||
|
||||
# else
|
||||
/* No 16 bit support: force chopping 16-bit input down to 8, in this case
|
||||
/* No 16-bit support: force chopping 16-bit input down to 8, in this case
|
||||
* the app program can chose if both APIs are available by setting the
|
||||
* correct scaling to use.
|
||||
*/
|
||||
|
@ -2098,10 +2097,10 @@ png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
|
|||
defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
|
||||
if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
|
||||
{
|
||||
if (info_ptr->bit_depth < png_ptr->user_transform_depth)
|
||||
if (png_ptr->user_transform_depth != 0)
|
||||
info_ptr->bit_depth = png_ptr->user_transform_depth;
|
||||
|
||||
if (info_ptr->channels < png_ptr->user_transform_channels)
|
||||
if (png_ptr->user_transform_channels != 0)
|
||||
info_ptr->channels = png_ptr->user_transform_channels;
|
||||
}
|
||||
#endif
|
||||
|
@ -2382,8 +2381,8 @@ png_do_scale_16_to_8(png_row_infop row_info, png_bytep row)
|
|||
|
||||
while (sp < ep)
|
||||
{
|
||||
/* The input is an array of 16 bit components, these must be scaled to
|
||||
* 8 bits each. For a 16 bit value V the required value (from the PNG
|
||||
/* The input is an array of 16-bit components, these must be scaled to
|
||||
* 8 bits each. For a 16-bit value V the required value (from the PNG
|
||||
* specification) is:
|
||||
*
|
||||
* (V * 255) / 65535
|
||||
|
@ -2404,7 +2403,7 @@ png_do_scale_16_to_8(png_row_infop row_info, png_bytep row)
|
|||
*
|
||||
* The approximate differs from the exact answer only when (vlo-vhi) is
|
||||
* 128; it then gives a correction of +1 when the exact correction is
|
||||
* 0. This gives 128 errors. The exact answer (correct for all 16 bit
|
||||
* 0. This gives 128 errors. The exact answer (correct for all 16-bit
|
||||
* input values) is:
|
||||
*
|
||||
* error = (vlo-vhi+128)*65535 >> 24;
|
||||
|
@ -3148,9 +3147,9 @@ png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
|
|||
if (red != green || red != blue)
|
||||
rgb_error |= 1;
|
||||
|
||||
/* From 1.5.5 in the 16 bit case do the accurate conversion even
|
||||
/* From 1.5.5 in the 16-bit case do the accurate conversion even
|
||||
* in the 'fast' case - this is because this is where the code
|
||||
* ends up when handling linear 16 bit data.
|
||||
* ends up when handling linear 16-bit data.
|
||||
*/
|
||||
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue + 16384) >>
|
||||
15);
|
||||
|
@ -3315,7 +3314,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
|||
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
||||
== png_ptr->trans_color.gray)
|
||||
{
|
||||
unsigned int tmp = *sp & (0xf0f >> (4 - shift));
|
||||
unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
|
||||
tmp |= png_ptr->background.gray << shift;
|
||||
*sp = (png_byte)(tmp & 0xff);
|
||||
}
|
||||
|
@ -3325,7 +3324,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
|||
unsigned int p = (*sp >> shift) & 0x0f;
|
||||
unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
|
||||
0x0f;
|
||||
unsigned int tmp = *sp & (0xf0f >> (4 - shift));
|
||||
unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
|
||||
tmp |= g << shift;
|
||||
*sp = (png_byte)(tmp & 0xff);
|
||||
}
|
||||
|
@ -3351,7 +3350,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
|||
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
||||
== png_ptr->trans_color.gray)
|
||||
{
|
||||
unsigned int tmp = *sp & (0xf0f >> (4 - shift));
|
||||
unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
|
||||
tmp |= png_ptr->background.gray << shift;
|
||||
*sp = (png_byte)(tmp & 0xff);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* pngrutil.c - utilities to read a PNG file
|
||||
*
|
||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
|
@ -89,7 +89,13 @@ png_get_int_32)(png_const_bytep buf)
|
|||
return uval;
|
||||
|
||||
uval = (uval ^ 0xffffffff) + 1; /* 2's complement: -x = ~x+1 */
|
||||
return -(png_int_32)uval;
|
||||
if ((uval & 0x80000000) == 0) /* no overflow */
|
||||
return -(png_int_32)uval;
|
||||
/* The following has to be safe; this function only gets called on PNG data
|
||||
* and if we get here that data is invalid. 0 is the most safe value and
|
||||
* if not then an attacker would surely just generate a PNG with 0 instead.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */
|
||||
|
@ -98,7 +104,7 @@ png_get_uint_16)(png_const_bytep buf)
|
|||
{
|
||||
/* ANSI-C requires an int value to accomodate at least 16 bits so this
|
||||
* works and allows the compiler not to worry about possible narrowing
|
||||
* on 32 bit systems. (Pre-ANSI systems did not make integers smaller
|
||||
* on 32-bit systems. (Pre-ANSI systems did not make integers smaller
|
||||
* than 16 bits either.)
|
||||
*/
|
||||
unsigned int val =
|
||||
|
@ -871,7 +877,7 @@ void /* PRIVATE */
|
|||
png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||
{
|
||||
png_color palette[PNG_MAX_PALETTE_LENGTH];
|
||||
int num, i;
|
||||
int max_palette_length, num, i;
|
||||
#ifdef PNG_POINTER_INDEXING_SUPPORTED
|
||||
png_colorp pal_ptr;
|
||||
#endif
|
||||
|
@ -932,6 +938,19 @@ png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||
/* The cast is safe because 'length' is less than 3*PNG_MAX_PALETTE_LENGTH */
|
||||
num = (int)length / 3;
|
||||
|
||||
/* If the palette has 256 or fewer entries but is too large for the bit
|
||||
* depth, we don't issue an error, to preserve the behavior of previous
|
||||
* libpng versions. We silently truncate the unused extra palette entries
|
||||
* here.
|
||||
*/
|
||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
max_palette_length = (1 << png_ptr->bit_depth);
|
||||
else
|
||||
max_palette_length = PNG_MAX_PALETTE_LENGTH;
|
||||
|
||||
if (num > max_palette_length)
|
||||
num = max_palette_length;
|
||||
|
||||
#ifdef PNG_POINTER_INDEXING_SUPPORTED
|
||||
for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
|
||||
{
|
||||
|
@ -964,7 +983,7 @@ png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
#endif
|
||||
{
|
||||
png_crc_finish(png_ptr, 0);
|
||||
png_crc_finish(png_ptr, (int) length - num * 3);
|
||||
}
|
||||
|
||||
#ifndef PNG_READ_OPT_PLTE_SUPPORTED
|
||||
|
@ -1823,7 +1842,7 @@ png_handle_tRNS(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||
return;
|
||||
}
|
||||
|
||||
if (length > png_ptr->num_palette ||
|
||||
if (length > (unsigned int) png_ptr->num_palette ||
|
||||
length > (unsigned int) PNG_MAX_PALETTE_LENGTH ||
|
||||
length == 0)
|
||||
{
|
||||
|
@ -1987,7 +2006,8 @@ png_handle_hIST(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||
|
||||
num = length / 2 ;
|
||||
|
||||
if (num != png_ptr->num_palette || num > (unsigned int) PNG_MAX_PALETTE_LENGTH)
|
||||
if (num != (unsigned int) png_ptr->num_palette ||
|
||||
num > (unsigned int) PNG_MAX_PALETTE_LENGTH)
|
||||
{
|
||||
png_crc_finish(png_ptr, length);
|
||||
png_chunk_benign_error(png_ptr, "invalid");
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* pngset.c - storage of image information into info struct
|
||||
*
|
||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
|
@ -123,12 +123,12 @@ png_set_cHRM_XYZ(png_const_structrp png_ptr, png_inforp info_ptr, double red_X,
|
|||
png_fixed(png_ptr, red_X, "cHRM Red X"),
|
||||
png_fixed(png_ptr, red_Y, "cHRM Red Y"),
|
||||
png_fixed(png_ptr, red_Z, "cHRM Red Z"),
|
||||
png_fixed(png_ptr, green_X, "cHRM Red X"),
|
||||
png_fixed(png_ptr, green_Y, "cHRM Red Y"),
|
||||
png_fixed(png_ptr, green_Z, "cHRM Red Z"),
|
||||
png_fixed(png_ptr, blue_X, "cHRM Red X"),
|
||||
png_fixed(png_ptr, blue_Y, "cHRM Red Y"),
|
||||
png_fixed(png_ptr, blue_Z, "cHRM Red Z"));
|
||||
png_fixed(png_ptr, green_X, "cHRM Green X"),
|
||||
png_fixed(png_ptr, green_Y, "cHRM Green Y"),
|
||||
png_fixed(png_ptr, green_Z, "cHRM Green Z"),
|
||||
png_fixed(png_ptr, blue_X, "cHRM Blue X"),
|
||||
png_fixed(png_ptr, blue_Y, "cHRM Blue Y"),
|
||||
png_fixed(png_ptr, blue_Z, "cHRM Blue Z"));
|
||||
}
|
||||
# endif /* FLOATING_POINT */
|
||||
|
||||
|
@ -518,12 +518,17 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
|||
png_const_colorp palette, int num_palette)
|
||||
{
|
||||
|
||||
png_uint_32 max_palette_length;
|
||||
|
||||
png_debug1(1, "in %s storage function", "PLTE");
|
||||
|
||||
if (png_ptr == NULL || info_ptr == NULL)
|
||||
return;
|
||||
|
||||
if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
|
||||
max_palette_length = (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
|
||||
(1 << png_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
|
||||
|
||||
if (num_palette < 0 || num_palette > (int) max_palette_length)
|
||||
{
|
||||
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
png_error(png_ptr, "Invalid palette length");
|
||||
|
@ -556,8 +561,8 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
|||
png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
|
||||
|
||||
/* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
|
||||
* of num_palette entries, in case of an invalid PNG file that has
|
||||
* too-large sample values.
|
||||
* of num_palette entries, in case of an invalid PNG file or incorrect
|
||||
* call to png_set_PLTE() with too-large sample values.
|
||||
*/
|
||||
png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
|
||||
PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
|
||||
|
@ -714,7 +719,7 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||
{
|
||||
int i;
|
||||
|
||||
png_debug1(1, "in %lx storage function", png_ptr == NULL ? 0xabadca11 :
|
||||
png_debug1(1, "in %lx storage function", png_ptr == NULL ? 0xabadca11U :
|
||||
(unsigned long)png_ptr->chunk_name);
|
||||
|
||||
if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
|
||||
|
@ -1713,7 +1718,7 @@ png_set_user_limits (png_structrp png_ptr, png_uint_32 user_width_max,
|
|||
{
|
||||
/* Images with dimensions larger than these limits will be
|
||||
* rejected by png_set_IHDR(). To accept any PNG datastream
|
||||
* regardless of dimensions, set both limits to 0x7ffffffL.
|
||||
* regardless of dimensions, set both limits to 0x7ffffff.
|
||||
*/
|
||||
if (png_ptr == NULL)
|
||||
return;
|
||||
|
|
|
@ -30,7 +30,7 @@ png_set_bgr(png_structrp png_ptr)
|
|||
#endif
|
||||
|
||||
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||
/* Turn on 16 bit byte swapping */
|
||||
/* Turn on 16-bit byte swapping */
|
||||
void PNGAPI
|
||||
png_set_swap(png_structrp png_ptr)
|
||||
{
|
||||
|
@ -313,7 +313,7 @@ png_do_invert(png_row_infop row_info, png_bytep row)
|
|||
|
||||
#ifdef PNG_16BIT_SUPPORTED
|
||||
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||
/* Swaps byte order on 16 bit depth images */
|
||||
/* Swaps byte order on 16-bit depth images */
|
||||
void /* PRIVATE */
|
||||
png_do_swap(png_row_infop row_info, png_bytep row)
|
||||
{
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* writes to a file pointer. Note that this routine sometimes gets called
|
||||
* with very small lengths, so you should implement some kind of simple
|
||||
* buffering if you are using unbuffered writes. This should never be asked
|
||||
* to write more than 64K on a 16 bit machine.
|
||||
* to write more than 64K on a 16-bit machine.
|
||||
*/
|
||||
|
||||
void /* PRIVATE */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* pngwrite.c - general routines to write a PNG file
|
||||
*
|
||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
|
@ -210,7 +210,7 @@ png_write_info(png_structrp png_ptr, png_const_inforp info_ptr)
|
|||
png_write_PLTE(png_ptr, info_ptr->palette,
|
||||
(png_uint_32)info_ptr->num_palette);
|
||||
|
||||
else if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) !=0)
|
||||
else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
png_error(png_ptr, "Valid palette required for paletted images");
|
||||
|
||||
#ifdef PNG_WRITE_tRNS_SUPPORTED
|
||||
|
@ -1431,7 +1431,7 @@ png_write_png(png_structrp png_ptr, png_inforp info_ptr,
|
|||
png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ENDIAN not supported");
|
||||
#endif
|
||||
|
||||
/* Swap bits of 1, 2, 4 bit packed pixel formats */
|
||||
/* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats */
|
||||
if ((transforms & PNG_TRANSFORM_PACKSWAP) != 0)
|
||||
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
||||
png_set_packswap(png_ptr);
|
||||
|
@ -2007,7 +2007,7 @@ png_image_write_main(png_voidp argument)
|
|||
/* Now set up the data transformations (*after* the header is written),
|
||||
* remove the handled transformations from the 'format' flags for checking.
|
||||
*
|
||||
* First check for a little endian system if writing 16 bit files.
|
||||
* First check for a little endian system if writing 16-bit files.
|
||||
*/
|
||||
if (write_16bit != 0)
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/* pngwutil.c - utilities to write a PNG file
|
||||
*
|
||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
|
@ -179,7 +179,7 @@ png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
|
|||
if (png_ptr == NULL)
|
||||
return;
|
||||
|
||||
/* On 64 bit architectures 'length' may not fit in a png_uint_32. */
|
||||
/* On 64-bit architectures 'length' may not fit in a png_uint_32. */
|
||||
if (length > PNG_UINT_31_MAX)
|
||||
png_error(png_ptr, "length exceeds PNG maximum");
|
||||
|
||||
|
@ -927,17 +927,20 @@ void /* PRIVATE */
|
|||
png_write_PLTE(png_structrp png_ptr, png_const_colorp palette,
|
||||
png_uint_32 num_pal)
|
||||
{
|
||||
png_uint_32 i;
|
||||
png_uint_32 max_palette_length, i;
|
||||
png_const_colorp pal_ptr;
|
||||
png_byte buf[3];
|
||||
|
||||
png_debug(1, "in png_write_PLTE");
|
||||
|
||||
max_palette_length = (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
|
||||
(1 << png_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
|
||||
|
||||
if ((
|
||||
#ifdef PNG_MNG_FEATURES_SUPPORTED
|
||||
(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0 &&
|
||||
#endif
|
||||
num_pal == 0) || num_pal > 256)
|
||||
num_pal == 0) || num_pal > max_palette_length)
|
||||
{
|
||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
{
|
||||
|
@ -1465,7 +1468,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
|
|||
|
||||
else if (color_type == PNG_COLOR_TYPE_GRAY)
|
||||
{
|
||||
/* One 16 bit value */
|
||||
/* One 16-bit value */
|
||||
if (tran->gray >= (1 << png_ptr->bit_depth))
|
||||
{
|
||||
png_app_warning(png_ptr,
|
||||
|
@ -1480,7 +1483,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
|
|||
|
||||
else if (color_type == PNG_COLOR_TYPE_RGB)
|
||||
{
|
||||
/* Three 16 bit values */
|
||||
/* Three 16-bit values */
|
||||
png_save_uint_16(buf, tran->red);
|
||||
png_save_uint_16(buf + 2, tran->green);
|
||||
png_save_uint_16(buf + 4, tran->blue);
|
||||
|
@ -2748,7 +2751,6 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||
|
||||
if (sum < mins)
|
||||
{
|
||||
mins = sum;
|
||||
best_row = png_ptr->try_row;
|
||||
if (png_ptr->tst_row != NULL)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче