mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
[master] Imported from libpng-1.6.24.tar
This commit is contained in:
parent
5a8b04137f
commit
0c29ab2b31
90
ANNOUNCE
90
ANNOUNCE
@ -1,4 +1,4 @@
|
|||||||
Libpng 1.6.23 - June 9, 2016
|
Libpng 1.6.24 - August 4, 2016
|
||||||
|
|
||||||
This is a public release of libpng, intended for use in production codes.
|
This is a public release of libpng, intended for use in production codes.
|
||||||
|
|
||||||
@ -7,38 +7,78 @@ Files available for download:
|
|||||||
Source files with LF line endings (for Unix/Linux) and with a
|
Source files with LF line endings (for Unix/Linux) and with a
|
||||||
"configure" script
|
"configure" script
|
||||||
|
|
||||||
libpng-1.6.23.tar.xz (LZMA-compressed, recommended)
|
libpng-1.6.24.tar.xz (LZMA-compressed, recommended)
|
||||||
libpng-1.6.23.tar.gz
|
libpng-1.6.24.tar.gz
|
||||||
|
|
||||||
Source files with CRLF line endings (for Windows), without the
|
Source files with CRLF line endings (for Windows), without the
|
||||||
"configure" script
|
"configure" script
|
||||||
|
|
||||||
lpng1623.7z (LZMA-compressed, recommended)
|
lpng1624.7z (LZMA-compressed, recommended)
|
||||||
lpng1623.zip
|
lpng1624.zip
|
||||||
|
|
||||||
Other information:
|
Other information:
|
||||||
|
|
||||||
libpng-1.6.23-README.txt
|
libpng-1.6.24-README.txt
|
||||||
libpng-1.6.23-LICENSE.txt
|
libpng-1.6.24-LICENSE.txt
|
||||||
libpng-1.6.23-*.asc (armored detached GPG signatures)
|
libpng-1.6.24-*.asc (armored detached GPG signatures)
|
||||||
|
|
||||||
Changes since the last public release (1.6.22):
|
Changes since the last public release (1.6.23):
|
||||||
|
Avoid potential overflow of the PNG_IMAGE_SIZE macro. This macro
|
||||||
Stop a potential memory leak in png_set_tRNS() (Bug report by Ted Ying).
|
is not used within libpng, but is used in some of the examples.
|
||||||
Fixed the progressive reader to handle empty first IDAT chunk properly
|
Correct filter heuristic overflow handling. This was broken when the
|
||||||
(patch by Timothy Nikkel). This bug was introduced in libpng-1.6.0 and
|
write filter code was moved out-of-line; if there is a single filter and
|
||||||
only affected the libpng16 branch.
|
the heuristic sum overflows the calculation of the filtered line is not
|
||||||
Added tests in pngvalid.c to check zero-length IDAT chunks in various
|
completed. In versions prior to 1.6 the code was duplicated in-line
|
||||||
positions. Fixed the sequential reader to handle these more robustly
|
and the check not performed, so the filter operation completed; however,
|
||||||
(John Bowler).
|
in the multi-filter case where the sum is performed the 'none' filter would
|
||||||
Corrected progressive read input buffer in pngvalid.c. The previous version
|
be selected if all the sums overflowed, even if it wasn't in the filter
|
||||||
the code invariably passed just one byte at a time to libpng. The intent
|
list. The fix to the first problem is simply to provide PNG_SIZE_MAX as
|
||||||
was to pass a random number of bytes in the range 0..511.
|
the current lmins sum value; this means the sum can never exceed it and
|
||||||
Moved sse2 prototype from pngpriv.h to contrib/intel/intel_sse.patch.
|
overflows silently. A reasonable compiler that does choose to inline
|
||||||
Added missing ")" in pngerror.c (Matt Sarrett).
|
the code will simply eliminate the sum check.
|
||||||
Fixed undefined behavior in png_push_save_buffer(). Do not call
|
The fix to the second problem is to use high precision arithmetic (this is
|
||||||
memcpy() with a null source, even if count is zero (Leon Scroggins III).
|
implemented in 1.7), however a simple safe fix here is to chose the lowest
|
||||||
Fixed bad link to RFC2083 in png.5 (Nikola Forro).
|
numbered filter in the list from png_set_filter (this only works if the
|
||||||
|
first problem is also fixed) (John Bowler).
|
||||||
|
Use a more efficient absolute value calculation on SSE2 (Matthieu Darbois).
|
||||||
|
Fixed the case where PNG_IMAGE_BUFFER_SIZE can overflow in the application
|
||||||
|
as a result of the application using an increased 'row_stride'; previously
|
||||||
|
png_image_finish_read only checked for overflow on the base calculation of
|
||||||
|
components. (I.e. it checked for overflow of a 32-bit number on the total
|
||||||
|
number of pixel components in the output format, not the possibly padded row
|
||||||
|
length and not the number of bytes, which for linear formats is twice the
|
||||||
|
number of components.)
|
||||||
|
MSVC does not like '-(unsigned)', so replaced it with 0U-(unsigned)
|
||||||
|
MSVC does not like (uInt) = -(unsigned) (i.e. as an initializer), unless
|
||||||
|
the conversion is explicitly invoked by a cast.
|
||||||
|
Put the SKIP definition in the correct place. It needs to come after the
|
||||||
|
png.h include (see all the other .c files in contrib/libtests) because it
|
||||||
|
depends on PNG_LIBPNG_VER.
|
||||||
|
Removed the three compile warning options from the individual project
|
||||||
|
files into the zlib.props globals. It increases the warning level from 4
|
||||||
|
to All and adds a list of the warnings that need to be turned off. This is
|
||||||
|
semi-documentary; the intent is to tell libpng users which warnings have
|
||||||
|
been examined and judged non-fixable at present. The warning about
|
||||||
|
structure padding is fixable, but it would be a signficant change (moving
|
||||||
|
structure members around).
|
||||||
|
Optimized absolute value calculation in filter selection, similar to
|
||||||
|
code in the PAETH decoder in pngrutil.c. Build with PNG_USE_ABS to
|
||||||
|
use this.
|
||||||
|
Added pngcp to the build together with a pngcp.dfa configuration test.
|
||||||
|
Added high resolution timing to pngcp.
|
||||||
|
Added "Common linking failures" section to INSTALL.
|
||||||
|
Relocated misplaced #endif in png.c sRGB profile checking.
|
||||||
|
Fixed two Coverity issues in pngcp.c.
|
||||||
|
Avoid filter-selection heuristic sum calculations in cases where only one
|
||||||
|
filter is a candidate for selection. This trades off code size (added
|
||||||
|
private png_setup_*_row_only() functions) for speed.
|
||||||
|
Fixed some indentation to comply with our coding style.
|
||||||
|
Added contrib/tools/reindent.
|
||||||
|
Eliminated unnecessary tests of boolean png_isaligned() vs 0.
|
||||||
|
Conditionally compile SSE2 headers in contrib/intel/intel_sse.patch
|
||||||
|
Conditionally compile png_decompress_chunk().
|
||||||
|
Conditionally compile ARM_NEON headers in pngpriv.h
|
||||||
|
Updated contrib/intel/intel_sse.patch
|
||||||
|
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||||
|
|||||||
79
CHANGES
79
CHANGES
@ -5596,6 +5596,85 @@ Version 1.6.23rc02 [June 4, 2016]
|
|||||||
Version 1.6.23 [June 9, 2016]
|
Version 1.6.23 [June 9, 2016]
|
||||||
Fixed bad link to RFC2083 in png.5 (Nikola Forro).
|
Fixed bad link to RFC2083 in png.5 (Nikola Forro).
|
||||||
|
|
||||||
|
Version 1.6.24beta01 [June 11, 2016]
|
||||||
|
Avoid potential overflow of the PNG_IMAGE_SIZE macro. This macro
|
||||||
|
is not used within libpng, but is used in some of the examples.
|
||||||
|
|
||||||
|
Version 1.6.24beta02 [June 23, 2016]
|
||||||
|
Correct filter heuristic overflow handling. This was broken when the
|
||||||
|
write filter code was moved out-of-line; if there is a single filter and
|
||||||
|
the heuristic sum overflows the calculation of the filtered line is not
|
||||||
|
completed. In versions prior to 1.6 the code was duplicated in-line
|
||||||
|
and the check not performed, so the filter operation completed; however,
|
||||||
|
in the multi-filter case where the sum is performed the 'none' filter would
|
||||||
|
be selected if all the sums overflowed, even if it wasn't in the filter
|
||||||
|
list. The fix to the first problem is simply to provide PNG_SIZE_MAX as
|
||||||
|
the current lmins sum value; this means the sum can never exceed it and
|
||||||
|
overflows silently. A reasonable compiler that does choose to inline
|
||||||
|
the code will simply eliminate the sum check.
|
||||||
|
The fix to the second problem is to use high precision arithmetic (this is
|
||||||
|
implemented in 1.7), however a simple safe fix here is to chose the lowest
|
||||||
|
numbered filter in the list from png_set_filter (this only works if the
|
||||||
|
first problem is also fixed) (John Bowler).
|
||||||
|
Use a more efficient absolute value calculation on SSE2 (Matthieu Darbois).
|
||||||
|
Fixed the case where PNG_IMAGE_BUFFER_SIZE can overflow in the application
|
||||||
|
as a result of the application using an increased 'row_stride'; previously
|
||||||
|
png_image_finish_read only checked for overflow on the base calculation of
|
||||||
|
components. (I.e. it checked for overflow of a 32-bit number on the total
|
||||||
|
number of pixel components in the output format, not the possibly padded row
|
||||||
|
length and not the number of bytes, which for linear formats is twice the
|
||||||
|
number of components.)
|
||||||
|
MSVC does not like '-(unsigned)', so replaced it with 0U-(unsigned)
|
||||||
|
MSVC does not like (uInt) = -(unsigned) (i.e. as an initializer), unless
|
||||||
|
the conversion is explicitly invoked by a cast.
|
||||||
|
Put the SKIP definition in the correct place. It needs to come after the
|
||||||
|
png.h include (see all the other .c files in contrib/libtests) because it
|
||||||
|
depends on PNG_LIBPNG_VER.
|
||||||
|
Removed the three compile warning options from the individual project
|
||||||
|
files into the zlib.props globals. It increases the warning level from 4
|
||||||
|
to All and adds a list of the warnings that need to be turned off. This is
|
||||||
|
semi-documentary; the intent is to tell libpng users which warnings have
|
||||||
|
been examined and judged non-fixable at present. The warning about
|
||||||
|
structure padding is fixable, but it would be a signficant change (moving
|
||||||
|
structure members around).
|
||||||
|
|
||||||
|
Version 1.6.24beta03 [July 4, 2016]
|
||||||
|
Optimized absolute value calculation in filter selection, similar to
|
||||||
|
code in the PAETH decoder in pngrutil.c. Build with PNG_USE_ABS to
|
||||||
|
use this.
|
||||||
|
Added pngcp to the build together with a pngcp.dfa configuration test.
|
||||||
|
Added high resolution timing to pngcp.
|
||||||
|
Added "Common linking failures" section to INSTALL.
|
||||||
|
Relocated misplaced #endif in png.c sRGB profile checking.
|
||||||
|
Fixed two Coverity issues in pngcp.c.
|
||||||
|
|
||||||
|
Version 1.6.24beta04 [July 8, 2016]
|
||||||
|
Avoid filter-selection heuristic sum calculations in cases where only one
|
||||||
|
filter is a candidate for selection. This trades off code size (added
|
||||||
|
private png_setup_*_row_only() functions) for speed.
|
||||||
|
|
||||||
|
Version 1.6.24beta05 [July 13, 2016]
|
||||||
|
Fixed some indentation to comply with our coding style.
|
||||||
|
Added contrib/tools/reindent.
|
||||||
|
|
||||||
|
Version 1.6.24beta06 [July 18, 2016]
|
||||||
|
Fixed more indentation to comply with our coding style.
|
||||||
|
Eliminated unnecessary tests of boolean png_isaligned() vs 0.
|
||||||
|
|
||||||
|
Version 1.6.24rc01 [July 25, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.24rc02 [August 1, 2016]
|
||||||
|
Conditionally compile SSE2 headers in contrib/intel/intel_sse.patch
|
||||||
|
Conditionally compile png_decompress_chunk().
|
||||||
|
|
||||||
|
Version 1.6.24rc03 [August 2, 2016]
|
||||||
|
Conditionally compile ARM_NEON headers in pngpriv.h
|
||||||
|
Updated contrib/intel/intel_sse.patch
|
||||||
|
|
||||||
|
Version 1.6.24[August 4, 2016]
|
||||||
|
No changes.
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||||
|
|||||||
@ -35,7 +35,7 @@ enable_testing()
|
|||||||
|
|
||||||
set(PNGLIB_MAJOR 1)
|
set(PNGLIB_MAJOR 1)
|
||||||
set(PNGLIB_MINOR 6)
|
set(PNGLIB_MINOR 6)
|
||||||
set(PNGLIB_RELEASE 23)
|
set(PNGLIB_RELEASE 24)
|
||||||
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
||||||
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
||||||
|
|
||||||
@ -696,7 +696,7 @@ endif(NOT WIN32 OR CYGWIN OR MINGW)
|
|||||||
# SET UP LINKS
|
# SET UP LINKS
|
||||||
if(PNG_SHARED)
|
if(PNG_SHARED)
|
||||||
set_target_properties(png PROPERTIES
|
set_target_properties(png PROPERTIES
|
||||||
# VERSION 16.${PNGLIB_RELEASE}.1.6.23
|
# VERSION 16.${PNGLIB_RELEASE}.1.6.24
|
||||||
VERSION 16.${PNGLIB_RELEASE}.0
|
VERSION 16.${PNGLIB_RELEASE}.0
|
||||||
SOVERSION 16
|
SOVERSION 16
|
||||||
CLEAN_DIRECT_OUTPUT 1)
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
|
|||||||
43
INSTALL
43
INSTALL
@ -18,7 +18,8 @@ VIII. Configuring libpng for 16-bit platforms
|
|||||||
XIII. Removing unwanted object code
|
XIII. Removing unwanted object code
|
||||||
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
|
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
|
||||||
XV. Setjmp/longjmp issues
|
XV. Setjmp/longjmp issues
|
||||||
XVI. Other sources of information about libpng
|
XVI. Common linking failures
|
||||||
|
XVII. Other sources of information about libpng
|
||||||
|
|
||||||
I. Simple installation
|
I. Simple installation
|
||||||
|
|
||||||
@ -78,7 +79,7 @@ Or you can use one of the "projects" in the "projects" directory.
|
|||||||
Before installing libpng, you must first install zlib, if it
|
Before installing libpng, you must first install zlib, if it
|
||||||
is not already on your system. zlib can usually be found
|
is not already on your system. zlib can usually be found
|
||||||
wherever you got libpng; otherwise go to http://zlib.net. You can place
|
wherever you got libpng; otherwise go to http://zlib.net. You can place
|
||||||
zlib in in the same directory as libpng or in another directory.
|
zlib in the same directory as libpng or in another directory.
|
||||||
|
|
||||||
If your system already has a preinstalled zlib you will still need
|
If your system already has a preinstalled zlib you will still need
|
||||||
to have access to the zlib.h and zconf.h include files that
|
to have access to the zlib.h and zconf.h include files that
|
||||||
@ -118,8 +119,8 @@ or "zlib128") so that you have directories called "zlib" and "libpng".
|
|||||||
|
|
||||||
Your directory structure should look like this:
|
Your directory structure should look like this:
|
||||||
|
|
||||||
.. (the parent directory)
|
.. (the parent directory)
|
||||||
libpng (this directory)
|
libpng (this directory)
|
||||||
INSTALL (this file)
|
INSTALL (this file)
|
||||||
README
|
README
|
||||||
*.h, *.c => libpng source files
|
*.h, *.c => libpng source files
|
||||||
@ -382,28 +383,20 @@ This requires setjmp/longjmp, so you must either build the library
|
|||||||
with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
|
with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
|
and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
|
||||||
|
|
||||||
XVI. Other sources of information about libpng:
|
XVI. Common linking failures
|
||||||
|
|
||||||
|
If your application fails to find libpng or zlib entries while linking:
|
||||||
|
|
||||||
|
Be sure "-lz" appears after "-lpng" on your linking command.
|
||||||
|
|
||||||
|
Be sure you have built libpng, zlib, and your application for the
|
||||||
|
same platform (e.g., 32-bit or 64-bit).
|
||||||
|
|
||||||
|
If you are using the vstudio project, observe the WARNING in
|
||||||
|
project/vstudio/README.txt.
|
||||||
|
|
||||||
|
XVII. Other sources of information about libpng:
|
||||||
|
|
||||||
Further information can be found in the README and libpng-manual.txt
|
Further information can be found in the README and libpng-manual.txt
|
||||||
files, in the individual makefiles, in png.h, and the manual pages
|
files, in the individual makefiles, in png.h, and the manual pages
|
||||||
libpng.3 and png.5.
|
libpng.3 and png.5.
|
||||||
|
|
||||||
Using the ./configure script -- 16 December 2002.
|
|
||||||
=================================================
|
|
||||||
|
|
||||||
The ./configure script should work compatibly with what scripts/makefile.*
|
|
||||||
did, however there are some options you might need to add to configure
|
|
||||||
explicitly, which previously was done semi-automatically (if you didn't edit
|
|
||||||
scripts/makefile.* yourself, that is)
|
|
||||||
|
|
||||||
CFLAGS="-Wall -O -funroll-loops \
|
|
||||||
-malign-loops=2 -malign-functions=2" ./configure --prefix=/usr/include \
|
|
||||||
--with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include
|
|
||||||
|
|
||||||
You can alternatively specify --includedir=/usr/include, /usr/local/include,
|
|
||||||
/usr/include/libpng16, or whatever.
|
|
||||||
|
|
||||||
If you find that the configure script is out-of-date or is not supporting
|
|
||||||
your platform properly, try running autogen.sh to regenerate "configure",
|
|
||||||
"Makefile.in", and the other configuration files. Then try configure again.
|
|
||||||
|
|
||||||
|
|||||||
4
LICENSE
4
LICENSE
@ -10,7 +10,7 @@ this sentence.
|
|||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.0.7, July 1, 2000 through 1.6.23, June 9, 2016 are
|
libpng versions 1.0.7, July 1, 2000 through 1.6.24, August 4, 2016 are
|
||||||
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
derived from libpng-1.0.6, and are distributed according to the same
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
disclaimer and license as libpng-1.0.6 with the following individuals
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
@ -127,4 +127,4 @@ any encryption software. See the EAR, paragraphs 734.3(b)(3) and
|
|||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
June 9, 2016
|
August 4, 2016
|
||||||
|
|||||||
@ -18,7 +18,7 @@ check_PROGRAMS += timepng
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Utilities - installed
|
# Utilities - installed
|
||||||
bin_PROGRAMS= pngfix png-fix-itxt
|
bin_PROGRAMS= pngcp pngfix png-fix-itxt
|
||||||
|
|
||||||
# This ensures that pnglibconf.h gets built at the start of 'make all' or
|
# This ensures that pnglibconf.h gets built at the start of 'make all' or
|
||||||
# 'make check', but it does not add dependencies to the individual programs,
|
# 'make check', but it does not add dependencies to the individual programs,
|
||||||
@ -53,6 +53,9 @@ pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
|||||||
|
|
||||||
png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c
|
png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c
|
||||||
|
|
||||||
|
pngcp_SOURCES = contrib/tools/pngcp.c
|
||||||
|
pngcp_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
# Generally these are single line shell scripts to run a test with a particular
|
# Generally these are single line shell scripts to run a test with a particular
|
||||||
# set of parameters:
|
# set of parameters:
|
||||||
TESTS =\
|
TESTS =\
|
||||||
@ -230,6 +233,7 @@ contrib/libtests/timepng.o: pnglibconf.h
|
|||||||
|
|
||||||
contrib/tools/makesRGB.o: pnglibconf.h
|
contrib/tools/makesRGB.o: pnglibconf.h
|
||||||
contrib/tools/pngfix.o: pnglibconf.h
|
contrib/tools/pngfix.o: pnglibconf.h
|
||||||
|
contrib/tools/pngcp.o: pnglibconf.h
|
||||||
|
|
||||||
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
||||||
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
||||||
|
|||||||
2
README
2
README
@ -1,4 +1,4 @@
|
|||||||
README for libpng version 1.6.23 - June 9, 2016 (shared library 16.0)
|
README for libpng version 1.6.24 - August 4, 2016 (shared library 16.0)
|
||||||
See the note about version numbers near the top of png.h
|
See the note about version numbers near the top of png.h
|
||||||
|
|
||||||
See INSTALL for instructions on how to install libpng.
|
See INSTALL for instructions on how to install libpng.
|
||||||
|
|||||||
1
TODO
1
TODO
@ -11,7 +11,6 @@ Add "grayscale->palette" transformation and "palette->grayscale" detection.
|
|||||||
Improved dithering.
|
Improved dithering.
|
||||||
Multi-lingual error and warning message support.
|
Multi-lingual error and warning message support.
|
||||||
Complete sRGB transformation (presently it simply uses gamma=0.45455).
|
Complete sRGB transformation (presently it simply uses gamma=0.45455).
|
||||||
Make profile checking optional via a png_set_something() call.
|
|
||||||
Man pages for function calls.
|
Man pages for function calls.
|
||||||
Better documentation.
|
Better documentation.
|
||||||
Better filter selection
|
Better filter selection
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
|
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
|
||||||
* Written by Mans Rullgard, 2011.
|
* Written by Mans Rullgard, 2011.
|
||||||
* Last changed in libpng 1.6.22 [June 9, 2016]
|
* Last changed in libpng 1.6.22 [May 26, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
* Written by James Yu <james.yu at linaro.org>, October 2013.
|
* Written by James Yu <james.yu at linaro.org>, October 2013.
|
||||||
* Based on filter_neon.S, written by Mans Rullgard, 2011.
|
* Based on filter_neon.S, written by Mans Rullgard, 2011.
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [June 9, 2016]
|
* Last changed in libpng 1.6.22 [May 26, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
|
|||||||
12
configure.ac
12
configure.ac
@ -1,7 +1,7 @@
|
|||||||
# configure.ac
|
# configure.ac
|
||||||
|
|
||||||
# Copyright (c) 2004-2015 Glenn Randers-Pehrson
|
# Copyright (c) 2004-2015 Glenn Randers-Pehrson
|
||||||
# Last changed in libpng 1.6.22 [June 9, 2016]
|
# Last changed in libpng 1.6.22 [May 26, 2016]
|
||||||
|
|
||||||
# This code is released under the libpng license.
|
# This code is released under the libpng license.
|
||||||
# For conditions of distribution and use, see the disclaimer
|
# For conditions of distribution and use, see the disclaimer
|
||||||
@ -25,7 +25,7 @@ AC_PREREQ([2.68])
|
|||||||
|
|
||||||
dnl Version number stuff here:
|
dnl Version number stuff here:
|
||||||
|
|
||||||
AC_INIT([libpng],[1.6.23],[png-mng-implement@lists.sourceforge.net])
|
AC_INIT([libpng],[1.6.24],[png-mng-implement@lists.sourceforge.net])
|
||||||
AC_CONFIG_MACRO_DIR([scripts])
|
AC_CONFIG_MACRO_DIR([scripts])
|
||||||
|
|
||||||
# libpng does not follow GNU file name conventions (hence 'foreign')
|
# libpng does not follow GNU file name conventions (hence 'foreign')
|
||||||
@ -36,7 +36,7 @@ AC_CONFIG_MACRO_DIR([scripts])
|
|||||||
# 1.13 is required for parallel tests
|
# 1.13 is required for parallel tests
|
||||||
AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects])
|
AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects])
|
||||||
# The following line causes --disable-maintainer-mode to be the default to
|
# The following line causes --disable-maintainer-mode to be the default to
|
||||||
# configure, this is necessary because libpng distributions cannot rely on the
|
# configure. This is necessary because libpng distributions cannot rely on the
|
||||||
# time stamps of the autotools generated files being correct
|
# time stamps of the autotools generated files being correct
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
@ -46,10 +46,10 @@ dnl automake, so the following is not necessary (and is not defined anyway):
|
|||||||
dnl AM_PREREQ([1.11.2])
|
dnl AM_PREREQ([1.11.2])
|
||||||
dnl stop configure from automagically running automake
|
dnl stop configure from automagically running automake
|
||||||
|
|
||||||
PNGLIB_VERSION=1.6.23
|
PNGLIB_VERSION=1.6.24
|
||||||
PNGLIB_MAJOR=1
|
PNGLIB_MAJOR=1
|
||||||
PNGLIB_MINOR=6
|
PNGLIB_MINOR=6
|
||||||
PNGLIB_RELEASE=23
|
PNGLIB_RELEASE=24
|
||||||
|
|
||||||
dnl End of version number stuff
|
dnl End of version number stuff
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ AC_PROG_INSTALL
|
|||||||
AC_PROG_LN_S
|
AC_PROG_LN_S
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
|
|
||||||
dnl libtool/libtoolize; version 2.4.2 is the tested version, this or any
|
dnl libtool/libtoolize; version 2.4.2 is the tested version. This or any
|
||||||
dnl compatible later version may be used
|
dnl compatible later version may be used
|
||||||
LT_INIT([win32-dll])
|
LT_INIT([win32-dll])
|
||||||
LT_PREREQ([2.4.2])
|
LT_PREREQ([2.4.2])
|
||||||
|
|||||||
57
contrib/conftest/pngcp.dfa
Normal file
57
contrib/conftest/pngcp.dfa
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# pngcp.dfa
|
||||||
|
# Build time configuration of libpng
|
||||||
|
#
|
||||||
|
# Author: John Bowler
|
||||||
|
# Copyright: (c) John Bowler, 2016
|
||||||
|
# Usage rights:
|
||||||
|
# To the extent possible under law, the author has waived all copyright and
|
||||||
|
# related or neighboring rights to this work. This work is published from:
|
||||||
|
# United States.
|
||||||
|
#
|
||||||
|
# Build libpng with support for pngcp. This means just png_read_png,
|
||||||
|
# png_write_png and small number of configuration settings.
|
||||||
|
#
|
||||||
|
everything = off
|
||||||
|
|
||||||
|
# This option is specific to this configuration; it adds a #define to the
|
||||||
|
# generated pnglibconf.h which turns on the (not portable) timing option for
|
||||||
|
# pngcp. Note that any option is automatically preceded by PNG_; there is no
|
||||||
|
# way round this and this is deliberate.
|
||||||
|
option PNGCP_TIMING
|
||||||
|
|
||||||
|
# Because of the everything off above the option must also be turned on. This
|
||||||
|
# may not be done in one step because it is safer and avoids mis-spelled options
|
||||||
|
# in user .dfa files to error out if an unrecognized option is turned on.
|
||||||
|
option PNGCP_TIMING on
|
||||||
|
|
||||||
|
# Options to turn on png_read_png and png_write_png:
|
||||||
|
option INFO_IMAGE on
|
||||||
|
option SEQUENTIAL_READ on
|
||||||
|
option EASY_ACCESS on
|
||||||
|
option WRITE on
|
||||||
|
option WRITE_16BIT on
|
||||||
|
option WRITE_FILTER on
|
||||||
|
|
||||||
|
# pngcp needs this to preserve unknown chunks, switching all these on means that
|
||||||
|
# pngcp can work without explicit known chunk reading suppport
|
||||||
|
option UNKNOWN_CHUNKS on
|
||||||
|
option SET_UNKNOWN_CHUNKS on
|
||||||
|
option HANDLE_AS_UNKNOWN on
|
||||||
|
option SAVE_UNKNOWN_CHUNKS on
|
||||||
|
option WRITE_UNKNOWN_CHUNKS on
|
||||||
|
|
||||||
|
# pngcp needs this to handle palette files with invalid indices:
|
||||||
|
option CHECK_FOR_INVALID_INDEX on
|
||||||
|
option GET_PALETTE_MAX on
|
||||||
|
|
||||||
|
# Pre-libpng 1.7 pngcp has to stash text chunks manually, post 1.7 without this
|
||||||
|
# text chunks should be handled as unknown ok.
|
||||||
|
option TEXT on
|
||||||
|
|
||||||
|
# this is used to turn off limits:
|
||||||
|
option USER_LIMITS on
|
||||||
|
option SET_USER_LIMITS on
|
||||||
|
|
||||||
|
# these are are just required for specific customizations
|
||||||
|
option WRITE_CUSTOMIZE_ZTXT_COMPRESSION on
|
||||||
|
option WRITE_CUSTOMIZE_COMPRESSION on
|
||||||
@ -6,7 +6,7 @@
|
|||||||
* Derived from arm/filter_neon_intrinsics.c, which was
|
* Derived from arm/filter_neon_intrinsics.c, which was
|
||||||
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
|
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [May 26, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@ -208,7 +208,7 @@ static __m128i abs_i16(__m128i x) {
|
|||||||
x = _mm_xor_si128(x, is_negative);
|
x = _mm_xor_si128(x, is_negative);
|
||||||
|
|
||||||
/* +1 to negative lanes, else +0. */
|
/* +1 to negative lanes, else +0. */
|
||||||
x = _mm_add_epi16(x, _mm_srli_epi16(is_negative, 15));
|
x = _mm_sub_epi16(x, is_negative);
|
||||||
return x;
|
return x;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,7 +55,7 @@ diff --git a/configure.ac b/configure.ac
|
|||||||
diff --git a/Makefile.am b/Makefile.am
|
diff --git a/Makefile.am b/Makefile.am
|
||||||
--- a/Makefile.am 2016-05-17 18:15:12.000000000 -0400
|
--- a/Makefile.am 2016-05-17 18:15:12.000000000 -0400
|
||||||
+++ b/Makefile.am 2016-05-25 19:48:10.631751170 -0400
|
+++ b/Makefile.am 2016-05-25 19:48:10.631751170 -0400
|
||||||
@@ -89,16 +89,20 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SO
|
@@ -92,16 +92,20 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SO
|
||||||
pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c\
|
pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c\
|
||||||
png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa
|
png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa
|
||||||
|
|
||||||
@ -77,8 +77,8 @@ diff --git a/Makefile.am b/Makefile.am
|
|||||||
# Versioned symbols and restricted exports
|
# Versioned symbols and restricted exports
|
||||||
if HAVE_SOLARIS_LD
|
if HAVE_SOLARIS_LD
|
||||||
diff --git a/pngpriv.h b/pngpriv.h
|
diff --git a/pngpriv.h b/pngpriv.h
|
||||||
--- a/pngpriv.h 2016-05-31 09:20:34.442885047 -0500
|
--- a/pngpriv.h 2016-08-01 18:13:38.770128810 -0500
|
||||||
+++ b/pngpriv.h 2016-05-31 09:14:54.583492341 -0500
|
+++ b/pngpriv.h 2016-08-01 18:50:19.130179017 -0500
|
||||||
@@ -177,16 +177,52 @@
|
@@ -177,16 +177,52 @@
|
||||||
# endif /* !PNG_ARM_NEON_IMPLEMENTATION */
|
# endif /* !PNG_ARM_NEON_IMPLEMENTATION */
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ diff --git a/pngpriv.h b/pngpriv.h
|
|||||||
* PNG_BUILD_DLL must not be set. To avoid the code below kicking in build a
|
* PNG_BUILD_DLL must not be set. To avoid the code below kicking in build a
|
||||||
* static library of libpng then link the DLL against that.
|
* static library of libpng then link the DLL against that.
|
||||||
*/
|
*/
|
||||||
@@ -1184,16 +1220,29 @@ PNG_INTERNAL_FUNCTION(void,png_read_filt
|
@@ -1185,16 +1221,31 @@ PNG_INTERNAL_FUNCTION(void,png_read_filt
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_neon,(png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
@ -140,7 +140,9 @@ diff --git a/pngpriv.h b/pngpriv.h
|
|||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+#if PNG_INTEL_SSE_IMPLEMENTATION > 0
|
||||||
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_sse2,(png_row_infop
|
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_sse2,(png_row_infop
|
||||||
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_sse2,(png_row_infop
|
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_sse2,(png_row_infop
|
||||||
@ -153,7 +155,8 @@ diff --git a/pngpriv.h b/pngpriv.h
|
|||||||
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_sse2,(png_row_infop
|
+PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_sse2,(png_row_infop
|
||||||
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
+ row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
+
|
+#endif
|
||||||
|
|
||||||
/* Choose the best filter to use and filter the row data */
|
/* Choose the best filter to use and filter the row data */
|
||||||
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
||||||
png_row_infop row_info),PNG_EMPTY);
|
png_row_infop row_info),PNG_EMPTY);
|
||||||
@ -161,18 +164,19 @@ diff --git a/pngpriv.h b/pngpriv.h
|
|||||||
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_IDAT_data,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_read_IDAT_data,(png_structrp png_ptr,
|
||||||
png_bytep output, png_alloc_size_t avail_out),PNG_EMPTY);
|
png_bytep output, png_alloc_size_t avail_out),PNG_EMPTY);
|
||||||
/* Read 'avail_out' bytes of data from the IDAT stream. If the output buffer
|
@@ -1914,16 +1965,20 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_O
|
||||||
@@ -1910,16 +1959,18 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_O
|
|
||||||
/* Just declare the optimization that will be used */
|
|
||||||
#else
|
|
||||||
/* List *all* the possible optimizations here - this branch is required if
|
/* List *all* the possible optimizations here - this branch is required if
|
||||||
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
||||||
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
||||||
*/
|
*/
|
||||||
|
# if PNG_ARM_NEON_OPT > 0
|
||||||
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
||||||
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
||||||
|
# endif
|
||||||
|
+# if PNG_INTEL_SSE_IMPLEMENTATION > 0
|
||||||
+PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_sse2,
|
+PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_sse2,
|
||||||
+ (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
+ (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
||||||
|
+# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2015,2016 John Cunningham Bowler
|
* Copyright (c) 2015,2016 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [May 26, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@ -45,8 +45,19 @@
|
|||||||
# define SKIP 0
|
# define SKIP 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_INFO_IMAGE_SUPPORTED) && defined(PNG_SEQUENTIAL_READ_SUPPORTED)\
|
#if PNG_LIBPNG_VER < 10700
|
||||||
&& (defined(PNG_READ_PNG_SUPPORTED) || PNG_LIBPNG_VER < 10700)
|
/* READ_PNG and WRITE_PNG were not defined, so: */
|
||||||
|
# ifdef PNG_INFO_IMAGE_SUPPORTED
|
||||||
|
# ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
|
# define PNG_READ_PNG_SUPPORTED
|
||||||
|
# endif /* SEQUENTIAL_READ */
|
||||||
|
# ifdef PNG_WRITE_SUPPORTED
|
||||||
|
# define PNG_WRITE_PNG_SUPPORTED
|
||||||
|
# endif /* WRITE */
|
||||||
|
# endif /* INFO_IMAGE */
|
||||||
|
#endif /* pre 1.7.0 */
|
||||||
|
|
||||||
|
#ifdef PNG_READ_PNG_SUPPORTED
|
||||||
/* If a transform is valid on both read and write this implies that if the
|
/* If a transform is valid on both read and write this implies that if the
|
||||||
* transform is applied to read it must also be applied on write to produce
|
* transform is applied to read it must also be applied on write to produce
|
||||||
* meaningful data. This is because these transforms when performed on read
|
* meaningful data. This is because these transforms when performed on read
|
||||||
@ -395,7 +406,7 @@ buffer_destroy(struct buffer *buffer)
|
|||||||
buffer_destroy_list(list);
|
buffer_destroy_list(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
static void
|
static void
|
||||||
buffer_start_write(struct buffer *buffer)
|
buffer_start_write(struct buffer *buffer)
|
||||||
{
|
{
|
||||||
@ -565,7 +576,7 @@ struct display
|
|||||||
png_structp read_pp;
|
png_structp read_pp;
|
||||||
png_infop read_ip;
|
png_infop read_ip;
|
||||||
|
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
/* Used to write a new image (the original info_ptr is used) */
|
/* Used to write a new image (the original info_ptr is used) */
|
||||||
png_structp write_pp;
|
png_structp write_pp;
|
||||||
struct buffer written_file; /* where the file gets written */
|
struct buffer written_file; /* where the file gets written */
|
||||||
@ -592,7 +603,7 @@ display_init(struct display *dp)
|
|||||||
dp->read_ip = NULL;
|
dp->read_ip = NULL;
|
||||||
buffer_init(&dp->original_file);
|
buffer_init(&dp->original_file);
|
||||||
|
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
dp->write_pp = NULL;
|
dp->write_pp = NULL;
|
||||||
buffer_init(&dp->written_file);
|
buffer_init(&dp->written_file);
|
||||||
# endif
|
# endif
|
||||||
@ -605,7 +616,7 @@ display_clean_read(struct display *dp)
|
|||||||
png_destroy_read_struct(&dp->read_pp, &dp->read_ip, NULL);
|
png_destroy_read_struct(&dp->read_pp, &dp->read_ip, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
static void
|
static void
|
||||||
display_clean_write(struct display *dp)
|
display_clean_write(struct display *dp)
|
||||||
{
|
{
|
||||||
@ -617,7 +628,7 @@ display_clean_write(struct display *dp)
|
|||||||
static void
|
static void
|
||||||
display_clean(struct display *dp)
|
display_clean(struct display *dp)
|
||||||
{
|
{
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
display_clean_write(dp);
|
display_clean_write(dp);
|
||||||
# endif
|
# endif
|
||||||
display_clean_read(dp);
|
display_clean_read(dp);
|
||||||
@ -635,7 +646,7 @@ static void
|
|||||||
display_destroy(struct display *dp)
|
display_destroy(struct display *dp)
|
||||||
{
|
{
|
||||||
/* Release any memory held in the display. */
|
/* Release any memory held in the display. */
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
buffer_destroy(&dp->written_file);
|
buffer_destroy(&dp->written_file);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@ -1082,6 +1093,7 @@ compare_read(struct display *dp, int applied_transforms)
|
|||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
# ifdef PNG_sBIT_SUPPORTED
|
||||||
{
|
{
|
||||||
unsigned long y;
|
unsigned long y;
|
||||||
int bpp; /* bits-per-pixel then bytes-per-pixel */
|
int bpp; /* bits-per-pixel then bytes-per-pixel */
|
||||||
@ -1243,12 +1255,16 @@ compare_read(struct display *dp, int applied_transforms)
|
|||||||
}
|
}
|
||||||
} /* for y */
|
} /* for y */
|
||||||
}
|
}
|
||||||
|
# else /* !sBIT */
|
||||||
|
display_log(dp, INTERNAL_ERROR,
|
||||||
|
"active shift transform but no sBIT support");
|
||||||
|
# endif /* !sBIT */
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1; /* compare succeeded */
|
return 1; /* compare succeeded */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
static void
|
static void
|
||||||
buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
|
buffer_write(struct display *dp, struct buffer *buffer, png_bytep data,
|
||||||
png_size_t size)
|
png_size_t size)
|
||||||
@ -1347,7 +1363,7 @@ write_png(struct display *dp, png_infop ip, int transforms)
|
|||||||
*/
|
*/
|
||||||
display_clean_write(dp);
|
display_clean_write(dp);
|
||||||
}
|
}
|
||||||
#endif /* WRITE_SUPPORTED */
|
#endif /* WRITE_PNG */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
skip_transform(struct display *dp, int tr)
|
skip_transform(struct display *dp, int tr)
|
||||||
@ -1409,7 +1425,7 @@ test_one_file(struct display *dp, const char *filename)
|
|||||||
return; /* no point testing more */
|
return; /* no point testing more */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
/* Second test: write the original PNG data out to a new file (to test the
|
/* Second test: write the original PNG data out to a new file (to test the
|
||||||
* write side) then read the result back in and make sure that it hasn't
|
* write side) then read the result back in and make sure that it hasn't
|
||||||
* changed.
|
* changed.
|
||||||
@ -1450,7 +1466,7 @@ test_one_file(struct display *dp, const char *filename)
|
|||||||
* out and read it back in again (without the reversible transforms)
|
* out and read it back in again (without the reversible transforms)
|
||||||
* we should get back to the place where we started.
|
* we should get back to the place where we started.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_PNG_SUPPORTED
|
||||||
if ((current & write_transforms) == current)
|
if ((current & write_transforms) == current)
|
||||||
{
|
{
|
||||||
/* All transforms reversible: write the PNG with the transformations
|
/* All transforms reversible: write the PNG with the transformations
|
||||||
@ -1686,7 +1702,7 @@ main(const int argc, const char * const * const argv)
|
|||||||
return errors != 0;
|
return errors != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* !INFO_IMAGE || !SEQUENTIAL_READ || !READ_PNG*/
|
#else /* !READ_PNG */
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2013-2016 John Cunningham Bowler
|
* Copyright (c) 2013-2016 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [May 26, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@ -26,15 +26,6 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
|
|
||||||
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
|
|
||||||
*/
|
|
||||||
#if PNG_LIBPNG_VER >= 10601 && defined(HAVE_CONFIG_H)
|
|
||||||
# define SKIP 77
|
|
||||||
#else
|
|
||||||
# define SKIP 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define the following to use this test against your installed libpng, rather
|
/* Define the following to use this test against your installed libpng, rather
|
||||||
* than the one being built here:
|
* than the one being built here:
|
||||||
*/
|
*/
|
||||||
@ -44,6 +35,15 @@
|
|||||||
# include "../../png.h"
|
# include "../../png.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
|
||||||
|
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
|
||||||
|
*/
|
||||||
|
#if PNG_LIBPNG_VER >= 10601 && defined(HAVE_CONFIG_H)
|
||||||
|
# define SKIP 77
|
||||||
|
#else
|
||||||
|
# define SKIP 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED /* Else nothing can be done */
|
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED /* Else nothing can be done */
|
||||||
#include "../tools/sRGB.h"
|
#include "../tools/sRGB.h"
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngvalid.c - validate libpng by constructing then reading png files.
|
/* pngvalid.c - validate libpng by constructing then reading png files.
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.23 [June 9, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 2014-2016 Glenn Randers-Pehrson
|
* Copyright (c) 2014-2016 Glenn Randers-Pehrson
|
||||||
* Written by John Cunningham Bowler
|
* Written by John Cunningham Bowler
|
||||||
*
|
*
|
||||||
@ -1115,7 +1115,7 @@ store_warning(png_structp ppIn, png_const_charp message)
|
|||||||
if (!ps->expect_warning)
|
if (!ps->expect_warning)
|
||||||
store_log(ps, pp, message, 0 /* warning */);
|
store_log(ps, pp, message, 0 /* warning */);
|
||||||
else
|
else
|
||||||
ps->saw_warning = 1;
|
ps->saw_warning = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* These somewhat odd functions are used when reading an image to ensure that
|
/* These somewhat odd functions are used when reading an image to ensure that
|
||||||
@ -1589,7 +1589,7 @@ store_read_chunk(png_store *ps, png_bytep pb, const png_size_t max,
|
|||||||
{
|
{
|
||||||
if (chunkpos < chunklen-4U)
|
if (chunkpos < chunklen-4U)
|
||||||
{
|
{
|
||||||
uInt avail = -1;
|
uInt avail = (uInt)-1;
|
||||||
|
|
||||||
if (avail > (IDAT_len-4U) - IDAT_pos)
|
if (avail > (IDAT_len-4U) - IDAT_pos)
|
||||||
avail = (uInt)/*SAFE*/((IDAT_len-4U) - IDAT_pos);
|
avail = (uInt)/*SAFE*/((IDAT_len-4U) - IDAT_pos);
|
||||||
|
|||||||
@ -1,4 +1,11 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
# chkfmt
|
||||||
|
#
|
||||||
|
# COPYRIGHT: Written by John Cunningham Bowler, 2010.
|
||||||
|
# To the extent possible under law, the author has waived all copyright and
|
||||||
|
# related or neighboring rights to this work. This work is published from:
|
||||||
|
# United States.
|
||||||
#
|
#
|
||||||
# Check the format of the source files in the current directory - checks for a
|
# Check the format of the source files in the current directory - checks for a
|
||||||
# line length of 80 characters max and no tab characters.
|
# line length of 80 characters max and no tab characters.
|
||||||
|
|||||||
2453
contrib/tools/pngcp.c
Normal file
2453
contrib/tools/pngcp.c
Normal file
File diff suppressed because it is too large
Load Diff
25
contrib/tools/reindent
Executable file
25
contrib/tools/reindent
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# reindent a libpng C source
|
||||||
|
|
||||||
|
# COPYRIGHT: Written by Glenn Randers-Pehrson, 2016.
|
||||||
|
# To the extent possible under law, the author has waived all copyright and
|
||||||
|
# related or neighboring rights to this work. This work is published from:
|
||||||
|
# United States.
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
# reindent inputtabsize outputtabsize inputcontinuestring outputcontinuestring
|
||||||
|
#
|
||||||
|
# Assumes that continued lines begin with indentation plus one space, and
|
||||||
|
# that continued comments begin with indentation plus " *".
|
||||||
|
#
|
||||||
|
# eg, to change libpng coding style from 3-space indentation with 4-space
|
||||||
|
# continuations to 4-space indentation with 2-space continuations:
|
||||||
|
#
|
||||||
|
# reindent 3 4 "\t " " " < example.c > example.c_4_2
|
||||||
|
# and to restore the file back to libpng coding style
|
||||||
|
# reindent 4 3 " " " " < example.c_4_2 > example.c_3_4
|
||||||
|
|
||||||
|
unexpand --first-only --t $1 | \
|
||||||
|
sed -e "/^ *$3[^\*]/{s/$3/$4/}" | \
|
||||||
|
expand -t $2
|
||||||
46
example.c
46
example.c
@ -2,8 +2,8 @@
|
|||||||
#if 0 /* in case someone actually tries to compile this */
|
#if 0 /* in case someone actually tries to compile this */
|
||||||
|
|
||||||
/* example.c - an example of using libpng
|
/* example.c - an example of using libpng
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Maintained 1998-2014 Glenn Randers-Pehrson
|
* Maintained 1998-2016 Glenn Randers-Pehrson
|
||||||
* Maintained 1996, 1997 Andreas Dilger)
|
* Maintained 1996, 1997 Andreas Dilger)
|
||||||
* Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
* To the extent possible under law, the authors have waived
|
* To the extent possible under law, the authors have waived
|
||||||
@ -97,7 +97,7 @@ int main(int argc, const char **argv)
|
|||||||
*/
|
*/
|
||||||
if (buffer != NULL &&
|
if (buffer != NULL &&
|
||||||
png_image_finish_read(&image, NULL/*background*/, buffer,
|
png_image_finish_read(&image, NULL/*background*/, buffer,
|
||||||
0/*row_stride*/, NULL/*colormap*/) != 0)
|
0/*row_stride*/, NULL/*colormap*/) != 0)
|
||||||
{
|
{
|
||||||
/* Now write the image out to the second argument. In the write
|
/* Now write the image out to the second argument. In the write
|
||||||
* call 'convert_to_8bit' allows 16-bit data to be squashed down to
|
* call 'convert_to_8bit' allows 16-bit data to be squashed down to
|
||||||
@ -105,7 +105,7 @@ int main(int argc, const char **argv)
|
|||||||
* to the 8-bit format.
|
* to the 8-bit format.
|
||||||
*/
|
*/
|
||||||
if (png_image_write_to_file(&image, argv[2], 0/*convert_to_8bit*/,
|
if (png_image_write_to_file(&image, argv[2], 0/*convert_to_8bit*/,
|
||||||
buffer, 0/*row_stride*/, NULL/*colormap*/) != 0)
|
buffer, 0/*row_stride*/, NULL/*colormap*/) != 0)
|
||||||
{
|
{
|
||||||
/* The image has been written successfully. */
|
/* The image has been written successfully. */
|
||||||
exit(0);
|
exit(0);
|
||||||
@ -295,7 +295,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
* was compiled with a compatible version of the library. REQUIRED
|
* was compiled with a compatible version of the library. REQUIRED
|
||||||
*/
|
*/
|
||||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
|
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
|
||||||
png_voidp user_error_ptr, user_error_fn, user_warning_fn);
|
png_voidp user_error_ptr, user_error_fn, user_warning_fn);
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
{
|
{
|
||||||
@ -375,7 +375,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
* low byte.
|
* low byte.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
|
#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
|
||||||
png_set_scale_16(png_ptr);
|
png_set_scale_16(png_ptr);
|
||||||
#else
|
#else
|
||||||
png_set_strip_16(png_ptr);
|
png_set_strip_16(png_ptr);
|
||||||
#endif
|
#endif
|
||||||
@ -419,10 +419,10 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
|
|
||||||
if (png_get_bKGD(png_ptr, info_ptr, &image_background) != 0)
|
if (png_get_bKGD(png_ptr, info_ptr, &image_background) != 0)
|
||||||
png_set_background(png_ptr, image_background,
|
png_set_background(png_ptr, image_background,
|
||||||
PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
|
PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
|
||||||
else
|
else
|
||||||
png_set_background(png_ptr, &my_background,
|
png_set_background(png_ptr, &my_background,
|
||||||
PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
|
PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
|
||||||
|
|
||||||
/* Some suggestions as to how to get a screen gamma value
|
/* Some suggestions as to how to get a screen gamma value
|
||||||
*
|
*
|
||||||
@ -481,7 +481,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
png_color std_color_cube[MAX_SCREEN_COLORS];
|
png_color std_color_cube[MAX_SCREEN_COLORS];
|
||||||
|
|
||||||
png_set_quantize(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
|
png_set_quantize(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
|
||||||
MAX_SCREEN_COLORS, NULL, 0);
|
MAX_SCREEN_COLORS, NULL, 0);
|
||||||
}
|
}
|
||||||
/* This reduces the image to the palette supplied in the file */
|
/* This reduces the image to the palette supplied in the file */
|
||||||
else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette) != 0)
|
else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette) != 0)
|
||||||
@ -491,7 +491,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
png_get_hIST(png_ptr, info_ptr, &histogram);
|
png_get_hIST(png_ptr, info_ptr, &histogram);
|
||||||
|
|
||||||
png_set_quantize(png_ptr, palette, num_palette,
|
png_set_quantize(png_ptr, palette, num_palette,
|
||||||
max_screen_colors, histogram, 0);
|
max_screen_colors, histogram, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* READ_QUANTIZE */
|
#endif /* READ_QUANTIZE */
|
||||||
@ -530,7 +530,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
* see the png_read_row() method below:
|
* see the png_read_row() method below:
|
||||||
*/
|
*/
|
||||||
number_passes = png_set_interlace_handling(png_ptr);
|
number_passes = png_set_interlace_handling(png_ptr);
|
||||||
#else
|
#else /* !READ_INTERLACING */
|
||||||
number_passes = 1;
|
number_passes = 1;
|
||||||
#endif /* READ_INTERLACING */
|
#endif /* READ_INTERLACING */
|
||||||
|
|
||||||
@ -552,7 +552,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
|
|
||||||
for (row = 0; row < height; row++)
|
for (row = 0; row < height; row++)
|
||||||
row_pointers[row] = png_malloc(png_ptr, png_get_rowbytes(png_ptr,
|
row_pointers[row] = png_malloc(png_ptr, png_get_rowbytes(png_ptr,
|
||||||
info_ptr));
|
info_ptr));
|
||||||
|
|
||||||
/* Now it's time to read the image. One of these methods is REQUIRED */
|
/* Now it's time to read the image. One of these methods is REQUIRED */
|
||||||
#ifdef entire /* Read the entire image in one go */
|
#ifdef entire /* Read the entire image in one go */
|
||||||
@ -574,10 +574,10 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
|
|||||||
{
|
{
|
||||||
#ifdef sparkle /* Read the image using the "sparkle" effect. */
|
#ifdef sparkle /* Read the image using the "sparkle" effect. */
|
||||||
png_read_rows(png_ptr, &row_pointers[y], NULL,
|
png_read_rows(png_ptr, &row_pointers[y], NULL,
|
||||||
number_of_rows);
|
number_of_rows);
|
||||||
#else no_sparkle /* Read the image using the "rectangle" effect */
|
#else no_sparkle /* Read the image using the "rectangle" effect */
|
||||||
png_read_rows(png_ptr, NULL, &row_pointers[y],
|
png_read_rows(png_ptr, NULL, &row_pointers[y],
|
||||||
number_of_rows);
|
number_of_rows);
|
||||||
#endif no_sparkle /* Use only one of these two methods */
|
#endif no_sparkle /* Use only one of these two methods */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -614,7 +614,7 @@ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
|
|||||||
* linked libraries.
|
* linked libraries.
|
||||||
*/
|
*/
|
||||||
*png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
|
*png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
|
||||||
png_voidp user_error_ptr, user_error_fn, user_warning_fn);
|
png_voidp user_error_ptr, user_error_fn, user_warning_fn);
|
||||||
|
|
||||||
if (*png_ptr == NULL)
|
if (*png_ptr == NULL)
|
||||||
{
|
{
|
||||||
@ -649,14 +649,14 @@ initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
|
|||||||
* the function png_get_progressive_ptr(png_ptr).
|
* the function png_get_progressive_ptr(png_ptr).
|
||||||
*/
|
*/
|
||||||
png_set_progressive_read_fn(*png_ptr, (void *)stream_data,
|
png_set_progressive_read_fn(*png_ptr, (void *)stream_data,
|
||||||
info_callback, row_callback, end_callback);
|
info_callback, row_callback, end_callback);
|
||||||
|
|
||||||
return (OK);
|
return (OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
process_data(png_structp *png_ptr, png_infop *info_ptr,
|
process_data(png_structp *png_ptr, png_infop *info_ptr,
|
||||||
png_bytep buffer, png_uint_32 length)
|
png_bytep buffer, png_uint_32 length)
|
||||||
{
|
{
|
||||||
if (setjmp(png_jmpbuf((*png_ptr))))
|
if (setjmp(png_jmpbuf((*png_ptr))))
|
||||||
{
|
{
|
||||||
@ -691,7 +691,7 @@ info_callback(png_structp png_ptr, png_infop info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
row_callback(png_structp png_ptr, png_bytep new_row,
|
row_callback(png_structp png_ptr, png_bytep new_row,
|
||||||
png_uint_32 row_num, int pass)
|
png_uint_32 row_num, int pass)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This function is called for every row in the image. If the
|
* This function is called for every row in the image. If the
|
||||||
@ -780,7 +780,7 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
* in case we are using dynamically linked libraries. REQUIRED.
|
* in case we are using dynamically linked libraries. REQUIRED.
|
||||||
*/
|
*/
|
||||||
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
|
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
|
||||||
png_voidp user_error_ptr, user_error_fn, user_warning_fn);
|
png_voidp user_error_ptr, user_error_fn, user_warning_fn);
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
{
|
{
|
||||||
@ -819,7 +819,7 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
* png_init_io() here you would call
|
* png_init_io() here you would call
|
||||||
*/
|
*/
|
||||||
png_set_write_fn(png_ptr, (void *)user_io_ptr, user_write_fn,
|
png_set_write_fn(png_ptr, (void *)user_io_ptr, user_write_fn,
|
||||||
user_IO_flush_function);
|
user_IO_flush_function);
|
||||||
/* where user_io_ptr is a structure you want available to the callbacks */
|
/* where user_io_ptr is a structure you want available to the callbacks */
|
||||||
#endif no_streams /* Only use one initialization method */
|
#endif no_streams /* Only use one initialization method */
|
||||||
|
|
||||||
@ -842,7 +842,7 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
* currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
|
* currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
|
||||||
*/
|
*/
|
||||||
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_???,
|
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_???,
|
||||||
PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||||
|
|
||||||
/* Set the palette if there is one. REQUIRED for indexed-color images */
|
/* Set the palette if there is one. REQUIRED for indexed-color images */
|
||||||
palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH
|
palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH
|
||||||
@ -988,11 +988,11 @@ void write_png(char *file_name /* , ... other image information ... */)
|
|||||||
png_bytep row_pointers[height];
|
png_bytep row_pointers[height];
|
||||||
|
|
||||||
if (height > PNG_UINT_32_MAX/(sizeof (png_bytep)))
|
if (height > PNG_UINT_32_MAX/(sizeof (png_bytep)))
|
||||||
png_error (png_ptr, "Image is too tall to process in memory");
|
png_error (png_ptr, "Image is too tall to process in memory");
|
||||||
|
|
||||||
/* Set up pointers into your "image" byte array */
|
/* Set up pointers into your "image" byte array */
|
||||||
for (k = 0; k < height; k++)
|
for (k = 0; k < height; k++)
|
||||||
row_pointers[k] = image + k*width*bytes_per_pixel;
|
row_pointers[k] = image + k*width*bytes_per_pixel;
|
||||||
|
|
||||||
/* One of the following output methods is REQUIRED */
|
/* One of the following output methods is REQUIRED */
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
libpng-manual.txt - A description on how to use and modify libpng
|
libpng-manual.txt - A description on how to use and modify libpng
|
||||||
|
|
||||||
libpng version 1.6.23 - June 9, 2016
|
libpng version 1.6.24 - August 4, 2016
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
<glennrp at users.sourceforge.net>
|
<glennrp at users.sourceforge.net>
|
||||||
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
||||||
@ -11,7 +11,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||||||
|
|
||||||
Based on:
|
Based on:
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.6.23 - June 9, 2016
|
libpng versions 0.97, January 1998, through 1.6.24 - August 4, 2016
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
||||||
|
|
||||||
@ -559,7 +559,7 @@ non-interlaced case the row that was just handled is simply one less than the
|
|||||||
passed in row number, and pass will always be 0. For the interlaced case the
|
passed in row number, and pass will always be 0. For the interlaced case the
|
||||||
same applies unless the row value is 0, in which case the row just handled was
|
same applies unless the row value is 0, in which case the row just handled was
|
||||||
the last one from one of the preceding passes. Because interlacing may skip a
|
the last one from one of the preceding passes. Because interlacing may skip a
|
||||||
pass you cannot be sure that the preceding pass is just 'pass-1', if you really
|
pass you cannot be sure that the preceding pass is just 'pass-1'; if you really
|
||||||
need to know what the last pass is record (row,pass) from the callback and use
|
need to know what the last pass is record (row,pass) from the callback and use
|
||||||
the last recorded value each time.
|
the last recorded value each time.
|
||||||
|
|
||||||
@ -2230,7 +2230,8 @@ is exactly the same. If you are planning on displaying the image
|
|||||||
after each pass, the "rectangle" effect is generally considered the
|
after each pass, the "rectangle" effect is generally considered the
|
||||||
better looking one.
|
better looking one.
|
||||||
|
|
||||||
If you only want the "sparkle" effect, just call png_read_rows() as
|
If you only want the "sparkle" effect, just call png_read_row() or
|
||||||
|
png_read_rows() as
|
||||||
normal, with the third parameter NULL. Make sure you make pass over
|
normal, with the third parameter NULL. Make sure you make pass over
|
||||||
the image number_of_passes times, and you don't change the data in the
|
the image number_of_passes times, and you don't change the data in the
|
||||||
rows between calls. You can change the locations of the data, just
|
rows between calls. You can change the locations of the data, just
|
||||||
@ -2239,6 +2240,8 @@ pass, and assumes the data from previous passes is still valid.
|
|||||||
|
|
||||||
png_read_rows(png_ptr, row_pointers, NULL,
|
png_read_rows(png_ptr, row_pointers, NULL,
|
||||||
number_of_rows);
|
number_of_rows);
|
||||||
|
or
|
||||||
|
png_read_row(png_ptr, row_pointers, NULL);
|
||||||
|
|
||||||
If you only want the first effect (the rectangles), do the same as
|
If you only want the first effect (the rectangles), do the same as
|
||||||
before except pass the row buffer in the third parameter, and leave
|
before except pass the row buffer in the third parameter, and leave
|
||||||
@ -2246,6 +2249,8 @@ the second parameter NULL.
|
|||||||
|
|
||||||
png_read_rows(png_ptr, NULL, row_pointers,
|
png_read_rows(png_ptr, NULL, row_pointers,
|
||||||
number_of_rows);
|
number_of_rows);
|
||||||
|
or
|
||||||
|
png_read_row(png_ptr, NULL, row_pointers);
|
||||||
|
|
||||||
If you don't want libpng to handle the interlacing details, just call
|
If you don't want libpng to handle the interlacing details, just call
|
||||||
png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
|
png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
|
||||||
@ -5345,7 +5350,7 @@ Since the PNG Development group is an ad-hoc body, we can't make
|
|||||||
an official declaration.
|
an official declaration.
|
||||||
|
|
||||||
This is your unofficial assurance that libpng from version 0.71 and
|
This is your unofficial assurance that libpng from version 0.71 and
|
||||||
upward through 1.6.23 are Y2K compliant. It is my belief that earlier
|
upward through 1.6.24 are Y2K compliant. It is my belief that earlier
|
||||||
versions were also Y2K compliant.
|
versions were also Y2K compliant.
|
||||||
|
|
||||||
Libpng only has two year fields. One is a 2-byte unsigned integer
|
Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
|
|||||||
27
libpng.3
27
libpng.3
@ -1,6 +1,6 @@
|
|||||||
.TH LIBPNG 3 "June 9, 2016"
|
.TH LIBPNG 3 "August 4, 2016"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.23
|
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.24
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fB
|
\fB
|
||||||
#include <png.h>\fP
|
#include <png.h>\fP
|
||||||
@ -510,7 +510,7 @@ Following is a copy of the libpng-manual.txt file that accompanies libpng.
|
|||||||
.SH LIBPNG.TXT
|
.SH LIBPNG.TXT
|
||||||
libpng-manual.txt - A description on how to use and modify libpng
|
libpng-manual.txt - A description on how to use and modify libpng
|
||||||
|
|
||||||
libpng version 1.6.23 - June 9, 2016
|
libpng version 1.6.24 - August 4, 2016
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
<glennrp at users.sourceforge.net>
|
<glennrp at users.sourceforge.net>
|
||||||
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
||||||
@ -521,7 +521,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||||||
|
|
||||||
Based on:
|
Based on:
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.6.23 - June 9, 2016
|
libpng versions 0.97, January 1998, through 1.6.24 - August 4, 2016
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
||||||
|
|
||||||
@ -1069,7 +1069,7 @@ non-interlaced case the row that was just handled is simply one less than the
|
|||||||
passed in row number, and pass will always be 0. For the interlaced case the
|
passed in row number, and pass will always be 0. For the interlaced case the
|
||||||
same applies unless the row value is 0, in which case the row just handled was
|
same applies unless the row value is 0, in which case the row just handled was
|
||||||
the last one from one of the preceding passes. Because interlacing may skip a
|
the last one from one of the preceding passes. Because interlacing may skip a
|
||||||
pass you cannot be sure that the preceding pass is just 'pass\-1', if you really
|
pass you cannot be sure that the preceding pass is just 'pass\-1'; if you really
|
||||||
need to know what the last pass is record (row,pass) from the callback and use
|
need to know what the last pass is record (row,pass) from the callback and use
|
||||||
the last recorded value each time.
|
the last recorded value each time.
|
||||||
|
|
||||||
@ -2740,7 +2740,8 @@ is exactly the same. If you are planning on displaying the image
|
|||||||
after each pass, the "rectangle" effect is generally considered the
|
after each pass, the "rectangle" effect is generally considered the
|
||||||
better looking one.
|
better looking one.
|
||||||
|
|
||||||
If you only want the "sparkle" effect, just call png_read_rows() as
|
If you only want the "sparkle" effect, just call png_read_row() or
|
||||||
|
png_read_rows() as
|
||||||
normal, with the third parameter NULL. Make sure you make pass over
|
normal, with the third parameter NULL. Make sure you make pass over
|
||||||
the image number_of_passes times, and you don't change the data in the
|
the image number_of_passes times, and you don't change the data in the
|
||||||
rows between calls. You can change the locations of the data, just
|
rows between calls. You can change the locations of the data, just
|
||||||
@ -2749,6 +2750,8 @@ pass, and assumes the data from previous passes is still valid.
|
|||||||
|
|
||||||
png_read_rows(png_ptr, row_pointers, NULL,
|
png_read_rows(png_ptr, row_pointers, NULL,
|
||||||
number_of_rows);
|
number_of_rows);
|
||||||
|
or
|
||||||
|
png_read_row(png_ptr, row_pointers, NULL);
|
||||||
|
|
||||||
If you only want the first effect (the rectangles), do the same as
|
If you only want the first effect (the rectangles), do the same as
|
||||||
before except pass the row buffer in the third parameter, and leave
|
before except pass the row buffer in the third parameter, and leave
|
||||||
@ -2756,6 +2759,8 @@ the second parameter NULL.
|
|||||||
|
|
||||||
png_read_rows(png_ptr, NULL, row_pointers,
|
png_read_rows(png_ptr, NULL, row_pointers,
|
||||||
number_of_rows);
|
number_of_rows);
|
||||||
|
or
|
||||||
|
png_read_row(png_ptr, NULL, row_pointers);
|
||||||
|
|
||||||
If you don't want libpng to handle the interlacing details, just call
|
If you don't want libpng to handle the interlacing details, just call
|
||||||
png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
|
png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
|
||||||
@ -5855,7 +5860,7 @@ Since the PNG Development group is an ad-hoc body, we can't make
|
|||||||
an official declaration.
|
an official declaration.
|
||||||
|
|
||||||
This is your unofficial assurance that libpng from version 0.71 and
|
This is your unofficial assurance that libpng from version 0.71 and
|
||||||
upward through 1.6.23 are Y2K compliant. It is my belief that earlier
|
upward through 1.6.24 are Y2K compliant. It is my belief that earlier
|
||||||
versions were also Y2K compliant.
|
versions were also Y2K compliant.
|
||||||
|
|
||||||
Libpng only has two year fields. One is a 2-byte unsigned integer
|
Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
@ -5957,7 +5962,7 @@ the first widely used release:
|
|||||||
...
|
...
|
||||||
1.5.27 15 10527 15.so.15.27[.0]
|
1.5.27 15 10527 15.so.15.27[.0]
|
||||||
...
|
...
|
||||||
1.6.23 16 10623 16.so.16.23[.0]
|
1.6.24 16 10624 16.so.16.24[.0]
|
||||||
|
|
||||||
Henceforth the source version will match the shared-library minor
|
Henceforth the source version will match the shared-library minor
|
||||||
and patch numbers; the shared-library major version number will be
|
and patch numbers; the shared-library major version number will be
|
||||||
@ -6013,7 +6018,7 @@ possible without all of you.
|
|||||||
|
|
||||||
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
||||||
|
|
||||||
Libpng version 1.6.23 - June 9, 2016:
|
Libpng version 1.6.24 - August 4, 2016:
|
||||||
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
||||||
Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
|
Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
|
||||||
|
|
||||||
@ -6038,7 +6043,7 @@ this sentence.
|
|||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.0.7, July 1, 2000 through 1.6.23, June 9, 2016 are
|
libpng versions 1.0.7, July 1, 2000 through 1.6.24, August 4, 2016 are
|
||||||
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
derived from libpng-1.0.6, and are distributed according to the same
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
disclaimer and license as libpng-1.0.6 with the following individuals
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
@ -6163,7 +6168,7 @@ files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
|||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
June 9, 2016
|
August 4, 2016
|
||||||
|
|
||||||
.\" end of man page
|
.\" end of man page
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
.TH LIBPNGPF 3 "June 9, 2016"
|
.TH LIBPNGPF 3 "August 4, 2016"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.23
|
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.24
|
||||||
(private functions)
|
(private functions)
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fB#include \fI"pngpriv.h"
|
\fB#include \fI"pngpriv.h"
|
||||||
|
|||||||
2
png.5
2
png.5
@ -1,4 +1,4 @@
|
|||||||
.TH PNG 5 "June 9, 2016"
|
.TH PNG 5 "August 4, 2016"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
png \- Portable Network Graphics (PNG) format
|
png \- Portable Network Graphics (PNG) format
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
|||||||
424
png.c
424
png.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -14,7 +14,7 @@
|
|||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef png_libpng_version_1_6_23 Your_png_h_is_not_version_1_6_23;
|
typedef png_libpng_version_1_6_24 Your_png_h_is_not_version_1_6_24;
|
||||||
|
|
||||||
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
||||||
* of the PNG file signature. If the PNG data is embedded into another
|
* of the PNG file signature. If the PNG data is embedded into another
|
||||||
@ -85,7 +85,7 @@ png_zalloc,(voidpf png_ptr, uInt items, uInt size),PNG_ALLOCATED)
|
|||||||
if (items >= (~(png_alloc_size_t)0)/size)
|
if (items >= (~(png_alloc_size_t)0)/size)
|
||||||
{
|
{
|
||||||
png_warning (png_voidcast(png_structrp, png_ptr),
|
png_warning (png_voidcast(png_structrp, png_ptr),
|
||||||
"Potential overflow in png_zalloc()");
|
"Potential overflow in png_zalloc()");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,10 +172,10 @@ png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, png_size_t length)
|
|||||||
int
|
int
|
||||||
png_user_version_check(png_structrp png_ptr, png_const_charp user_png_ver)
|
png_user_version_check(png_structrp png_ptr, png_const_charp user_png_ver)
|
||||||
{
|
{
|
||||||
/* Libpng versions 1.0.0 and later are binary compatible if the version
|
/* Libpng versions 1.0.0 and later are binary compatible if the version
|
||||||
* string matches through the second '.'; we must recompile any
|
* string matches through the second '.'; we must recompile any
|
||||||
* applications that use any older library version.
|
* applications that use any older library version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (user_png_ver != NULL)
|
if (user_png_ver != NULL)
|
||||||
{
|
{
|
||||||
@ -297,7 +297,7 @@ png_create_png_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
if (png_user_version_check(&create_struct, user_png_ver) != 0)
|
if (png_user_version_check(&create_struct, user_png_ver) != 0)
|
||||||
{
|
{
|
||||||
png_structrp png_ptr = png_voidcast(png_structrp,
|
png_structrp png_ptr = png_voidcast(png_structrp,
|
||||||
png_malloc_warn(&create_struct, (sizeof *png_ptr)));
|
png_malloc_warn(&create_struct, (sizeof *png_ptr)));
|
||||||
|
|
||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
{
|
{
|
||||||
@ -346,7 +346,7 @@ png_create_info_struct,(png_const_structrp png_ptr),PNG_ALLOCATED)
|
|||||||
* has always been done in 'example.c'.
|
* has always been done in 'example.c'.
|
||||||
*/
|
*/
|
||||||
info_ptr = png_voidcast(png_inforp, png_malloc_base(png_ptr,
|
info_ptr = png_voidcast(png_inforp, png_malloc_base(png_ptr,
|
||||||
(sizeof *info_ptr)));
|
(sizeof *info_ptr)));
|
||||||
|
|
||||||
if (info_ptr != NULL)
|
if (info_ptr != NULL)
|
||||||
memset(info_ptr, 0, (sizeof *info_ptr));
|
memset(info_ptr, 0, (sizeof *info_ptr));
|
||||||
@ -402,7 +402,7 @@ png_destroy_info_struct(png_const_structrp png_ptr, png_infopp info_ptr_ptr)
|
|||||||
*/
|
*/
|
||||||
PNG_FUNCTION(void,PNGAPI
|
PNG_FUNCTION(void,PNGAPI
|
||||||
png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
|
png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
|
||||||
PNG_DEPRECATED)
|
PNG_DEPRECATED)
|
||||||
{
|
{
|
||||||
png_inforp info_ptr = *ptr_ptr;
|
png_inforp info_ptr = *ptr_ptr;
|
||||||
|
|
||||||
@ -417,7 +417,7 @@ png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
|
|||||||
/* The following line is why this API should not be used: */
|
/* The following line is why this API should not be used: */
|
||||||
free(info_ptr);
|
free(info_ptr);
|
||||||
info_ptr = png_voidcast(png_inforp, png_malloc_base(NULL,
|
info_ptr = png_voidcast(png_inforp, png_malloc_base(NULL,
|
||||||
(sizeof *info_ptr)));
|
(sizeof *info_ptr)));
|
||||||
if (info_ptr == NULL)
|
if (info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
*ptr_ptr = info_ptr;
|
*ptr_ptr = info_ptr;
|
||||||
@ -430,7 +430,7 @@ png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
|
|||||||
/* The following API is not called internally */
|
/* The following API is not called internally */
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_data_freer(png_const_structrp png_ptr, png_inforp info_ptr,
|
png_data_freer(png_const_structrp png_ptr, png_inforp info_ptr,
|
||||||
int freer, png_uint_32 mask)
|
int freer, png_uint_32 mask)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_data_freer");
|
png_debug(1, "in png_data_freer");
|
||||||
|
|
||||||
@ -449,7 +449,7 @@ png_data_freer(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_free_data(png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 mask,
|
png_free_data(png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 mask,
|
||||||
int num)
|
int num)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_free_data");
|
png_debug(1, "in png_free_data");
|
||||||
|
|
||||||
@ -775,14 +775,14 @@ png_get_copyright(png_const_structrp png_ptr)
|
|||||||
#else
|
#else
|
||||||
# ifdef __STDC__
|
# ifdef __STDC__
|
||||||
return PNG_STRING_NEWLINE \
|
return PNG_STRING_NEWLINE \
|
||||||
"libpng version 1.6.23 - June 9, 2016" PNG_STRING_NEWLINE \
|
"libpng version 1.6.24 - August 4, 2016" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
||||||
PNG_STRING_NEWLINE \
|
PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
||||||
PNG_STRING_NEWLINE;
|
PNG_STRING_NEWLINE;
|
||||||
# else
|
# else
|
||||||
return "libpng version 1.6.23 - June 9, 2016\
|
return "libpng version 1.6.24 - August 4, 2016\
|
||||||
Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
|
Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
|
||||||
Copyright (c) 1996-1997 Andreas Dilger\
|
Copyright (c) 1996-1997 Andreas Dilger\
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
||||||
@ -1033,7 +1033,7 @@ png_zstream_error(png_structrp png_ptr, int ret)
|
|||||||
#ifdef PNG_GAMMA_SUPPORTED /* always set if COLORSPACE */
|
#ifdef PNG_GAMMA_SUPPORTED /* always set if COLORSPACE */
|
||||||
static int
|
static int
|
||||||
png_colorspace_check_gamma(png_const_structrp png_ptr,
|
png_colorspace_check_gamma(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, png_fixed_point gAMA, int from)
|
png_colorspacerp colorspace, png_fixed_point gAMA, int from)
|
||||||
/* This is called to check a new gamma value against an existing one. The
|
/* This is called to check a new gamma value against an existing one. The
|
||||||
* routine returns false if the new gamma value should not be written.
|
* routine returns false if the new gamma value should not be written.
|
||||||
*
|
*
|
||||||
@ -1047,7 +1047,7 @@ png_colorspace_check_gamma(png_const_structrp png_ptr,
|
|||||||
png_fixed_point gtest;
|
png_fixed_point gtest;
|
||||||
|
|
||||||
if ((colorspace->flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
|
if ((colorspace->flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
|
||||||
(png_muldiv(>est, colorspace->gamma, PNG_FP_1, gAMA) == 0 ||
|
(png_muldiv(>est, colorspace->gamma, PNG_FP_1, gAMA) == 0 ||
|
||||||
png_gamma_significant(gtest) != 0))
|
png_gamma_significant(gtest) != 0))
|
||||||
{
|
{
|
||||||
/* Either this is an sRGB image, in which case the calculated gamma
|
/* Either this is an sRGB image, in which case the calculated gamma
|
||||||
@ -1059,7 +1059,7 @@ png_colorspace_check_gamma(png_const_structrp png_ptr,
|
|||||||
if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0 || from == 2)
|
if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0 || from == 2)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "gamma value does not match sRGB",
|
png_chunk_report(png_ptr, "gamma value does not match sRGB",
|
||||||
PNG_CHUNK_ERROR);
|
PNG_CHUNK_ERROR);
|
||||||
/* Do not overwrite an sRGB value */
|
/* Do not overwrite an sRGB value */
|
||||||
return from == 2;
|
return from == 2;
|
||||||
}
|
}
|
||||||
@ -1067,7 +1067,7 @@ png_colorspace_check_gamma(png_const_structrp png_ptr,
|
|||||||
else /* sRGB tag not involved */
|
else /* sRGB tag not involved */
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "gamma value does not match libpng estimate",
|
png_chunk_report(png_ptr, "gamma value does not match libpng estimate",
|
||||||
PNG_CHUNK_WARNING);
|
PNG_CHUNK_WARNING);
|
||||||
return from == 1;
|
return from == 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1077,7 +1077,7 @@ png_colorspace_check_gamma(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_colorspace_set_gamma(png_const_structrp png_ptr,
|
png_colorspace_set_gamma(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, png_fixed_point gAMA)
|
png_colorspacerp colorspace, png_fixed_point gAMA)
|
||||||
{
|
{
|
||||||
/* Changed in libpng-1.5.4 to limit the values to ensure overflow can't
|
/* Changed in libpng-1.5.4 to limit the values to ensure overflow can't
|
||||||
* occur. Since the fixed point representation is asymetrical it is
|
* occur. Since the fixed point representation is asymetrical it is
|
||||||
@ -1635,8 +1635,8 @@ static const png_xy sRGB_xy = /* From ITU-R BT.709-3 */
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
png_colorspace_set_xy_and_XYZ(png_const_structrp png_ptr,
|
png_colorspace_set_xy_and_XYZ(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, const png_xy *xy, const png_XYZ *XYZ,
|
png_colorspacerp colorspace, const png_xy *xy, const png_XYZ *XYZ,
|
||||||
int preferred)
|
int preferred)
|
||||||
{
|
{
|
||||||
if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
|
if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -1683,7 +1683,7 @@ png_colorspace_set_xy_and_XYZ(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_colorspace_set_chromaticities(png_const_structrp png_ptr,
|
png_colorspace_set_chromaticities(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, const png_xy *xy, int preferred)
|
png_colorspacerp colorspace, const png_xy *xy, int preferred)
|
||||||
{
|
{
|
||||||
/* We must check the end points to ensure they are reasonable - in the past
|
/* We must check the end points to ensure they are reasonable - in the past
|
||||||
* color management systems have crashed as a result of getting bogus
|
* color management systems have crashed as a result of getting bogus
|
||||||
@ -1697,7 +1697,7 @@ png_colorspace_set_chromaticities(png_const_structrp png_ptr,
|
|||||||
{
|
{
|
||||||
case 0: /* success */
|
case 0: /* success */
|
||||||
return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, xy, &XYZ,
|
return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, xy, &XYZ,
|
||||||
preferred);
|
preferred);
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
/* We can't invert the chromaticities so we can't produce value XYZ
|
/* We can't invert the chromaticities so we can't produce value XYZ
|
||||||
@ -1720,7 +1720,7 @@ png_colorspace_set_chromaticities(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_colorspace_set_endpoints(png_const_structrp png_ptr,
|
png_colorspace_set_endpoints(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, const png_XYZ *XYZ_in, int preferred)
|
png_colorspacerp colorspace, const png_XYZ *XYZ_in, int preferred)
|
||||||
{
|
{
|
||||||
png_XYZ XYZ = *XYZ_in;
|
png_XYZ XYZ = *XYZ_in;
|
||||||
png_xy xy;
|
png_xy xy;
|
||||||
@ -1729,7 +1729,7 @@ png_colorspace_set_endpoints(png_const_structrp png_ptr,
|
|||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, &xy, &XYZ,
|
return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, &xy, &XYZ,
|
||||||
preferred);
|
preferred);
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
/* End points are invalid. */
|
/* End points are invalid. */
|
||||||
@ -1786,7 +1786,7 @@ is_ICC_signature(png_alloc_size_t it)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_alloc_size_t value, png_const_charp reason)
|
png_const_charp name, png_alloc_size_t value, png_const_charp reason)
|
||||||
{
|
{
|
||||||
size_t pos;
|
size_t pos;
|
||||||
char message[196]; /* see below for calculation */
|
char message[196]; /* see below for calculation */
|
||||||
@ -1811,8 +1811,8 @@ png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
char number[PNG_NUMBER_BUFFER_SIZE]; /* +24 = 114*/
|
char number[PNG_NUMBER_BUFFER_SIZE]; /* +24 = 114*/
|
||||||
|
|
||||||
pos = png_safecat(message, (sizeof message), pos,
|
pos = png_safecat(message, (sizeof message), pos,
|
||||||
png_format_number(number, number+(sizeof number),
|
png_format_number(number, number+(sizeof number),
|
||||||
PNG_NUMBER_FORMAT_x, value));
|
PNG_NUMBER_FORMAT_x, value));
|
||||||
pos = png_safecat(message, (sizeof message), pos, "h: "); /*+2 = 116*/
|
pos = png_safecat(message, (sizeof message), pos, "h: "); /*+2 = 116*/
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
@ -1826,7 +1826,7 @@ png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* application errors the PNG won't be written.)
|
* application errors the PNG won't be written.)
|
||||||
*/
|
*/
|
||||||
png_chunk_report(png_ptr, message,
|
png_chunk_report(png_ptr, message,
|
||||||
(colorspace != NULL) ? PNG_CHUNK_ERROR : PNG_CHUNK_WRITE_ERROR);
|
(colorspace != NULL) ? PNG_CHUNK_ERROR : PNG_CHUNK_WRITE_ERROR);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1835,7 +1835,7 @@ png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
#ifdef PNG_sRGB_SUPPORTED
|
#ifdef PNG_sRGB_SUPPORTED
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
int intent)
|
int intent)
|
||||||
{
|
{
|
||||||
/* sRGB sets known gamma, end points and (from the chunk) intent. */
|
/* sRGB sets known gamma, end points and (from the chunk) intent. */
|
||||||
/* IMPORTANT: these are not necessarily the values found in an ICC profile
|
/* IMPORTANT: these are not necessarily the values found in an ICC profile
|
||||||
@ -1872,10 +1872,10 @@ png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
*/
|
*/
|
||||||
if (intent < 0 || intent >= PNG_sRGB_INTENT_LAST)
|
if (intent < 0 || intent >= PNG_sRGB_INTENT_LAST)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, "sRGB",
|
return png_icc_profile_error(png_ptr, colorspace, "sRGB",
|
||||||
(unsigned)intent, "invalid sRGB rendering intent");
|
(unsigned)intent, "invalid sRGB rendering intent");
|
||||||
|
|
||||||
if ((colorspace->flags & PNG_COLORSPACE_HAVE_INTENT) != 0 &&
|
if ((colorspace->flags & PNG_COLORSPACE_HAVE_INTENT) != 0 &&
|
||||||
colorspace->rendering_intent != intent)
|
colorspace->rendering_intent != intent)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, "sRGB",
|
return png_icc_profile_error(png_ptr, colorspace, "sRGB",
|
||||||
(unsigned)intent, "inconsistent rendering intents");
|
(unsigned)intent, "inconsistent rendering intents");
|
||||||
|
|
||||||
@ -1889,8 +1889,8 @@ png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* warn but overwrite the value with the correct one.
|
* warn but overwrite the value with the correct one.
|
||||||
*/
|
*/
|
||||||
if ((colorspace->flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0 &&
|
if ((colorspace->flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0 &&
|
||||||
!png_colorspace_endpoints_match(&sRGB_xy, &colorspace->end_points_xy,
|
!png_colorspace_endpoints_match(&sRGB_xy, &colorspace->end_points_xy,
|
||||||
100))
|
100))
|
||||||
png_chunk_report(png_ptr, "cHRM chunk does not match sRGB",
|
png_chunk_report(png_ptr, "cHRM chunk does not match sRGB",
|
||||||
PNG_CHUNK_ERROR);
|
PNG_CHUNK_ERROR);
|
||||||
|
|
||||||
@ -1898,7 +1898,7 @@ png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* returns true when the 'from' argument corresponds to sRGB (2).
|
* returns true when the 'from' argument corresponds to sRGB (2).
|
||||||
*/
|
*/
|
||||||
(void)png_colorspace_check_gamma(png_ptr, colorspace, PNG_GAMMA_sRGB_INVERSE,
|
(void)png_colorspace_check_gamma(png_ptr, colorspace, PNG_GAMMA_sRGB_INVERSE,
|
||||||
2/*from sRGB*/);
|
2/*from sRGB*/);
|
||||||
|
|
||||||
/* intent: bugs in GCC force 'int' to be used as the parameter type. */
|
/* intent: bugs in GCC force 'int' to be used as the parameter type. */
|
||||||
colorspace->rendering_intent = (png_uint_16)intent;
|
colorspace->rendering_intent = (png_uint_16)intent;
|
||||||
@ -1933,19 +1933,19 @@ static const png_byte D50_nCIEXYZ[12] =
|
|||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_uint_32 profile_length)
|
png_const_charp name, png_uint_32 profile_length)
|
||||||
{
|
{
|
||||||
if (profile_length < 132)
|
if (profile_length < 132)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
||||||
"too short");
|
"too short");
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_uint_32 profile_length,
|
png_const_charp name, png_uint_32 profile_length,
|
||||||
png_const_bytep profile/* first 132 bytes only */, int color_type)
|
png_const_bytep profile/* first 132 bytes only */, int color_type)
|
||||||
{
|
{
|
||||||
png_uint_32 temp;
|
png_uint_32 temp;
|
||||||
|
|
||||||
@ -1957,18 +1957,18 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
temp = png_get_uint_32(profile);
|
temp = png_get_uint_32(profile);
|
||||||
if (temp != profile_length)
|
if (temp != profile_length)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"length does not match profile");
|
"length does not match profile");
|
||||||
|
|
||||||
temp = (png_uint_32) (*(profile+8));
|
temp = (png_uint_32) (*(profile+8));
|
||||||
if (temp > 3 && (profile_length & 3))
|
if (temp > 3 && (profile_length & 3))
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
|
||||||
"invalid length");
|
"invalid length");
|
||||||
|
|
||||||
temp = png_get_uint_32(profile+128); /* tag count: 12 bytes/tag */
|
temp = png_get_uint_32(profile+128); /* tag count: 12 bytes/tag */
|
||||||
if (temp > 357913930 || /* (2^32-4-132)/12: maximum possible tag count */
|
if (temp > 357913930 || /* (2^32-4-132)/12: maximum possible tag count */
|
||||||
profile_length < 132+12*temp) /* truncated tag table */
|
profile_length < 132+12*temp) /* truncated tag table */
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"tag count too large");
|
"tag count too large");
|
||||||
|
|
||||||
/* The 'intent' must be valid or we can't store it, ICC limits the intent to
|
/* The 'intent' must be valid or we can't store it, ICC limits the intent to
|
||||||
* 16 bits.
|
* 16 bits.
|
||||||
@ -1976,14 +1976,14 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
temp = png_get_uint_32(profile+64);
|
temp = png_get_uint_32(profile+64);
|
||||||
if (temp >= 0xffff) /* The ICC limit */
|
if (temp >= 0xffff) /* The ICC limit */
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"invalid rendering intent");
|
"invalid rendering intent");
|
||||||
|
|
||||||
/* This is just a warning because the profile may be valid in future
|
/* This is just a warning because the profile may be valid in future
|
||||||
* versions.
|
* versions.
|
||||||
*/
|
*/
|
||||||
if (temp >= PNG_sRGB_INTENT_LAST)
|
if (temp >= PNG_sRGB_INTENT_LAST)
|
||||||
(void)png_icc_profile_error(png_ptr, NULL, name, temp,
|
(void)png_icc_profile_error(png_ptr, NULL, name, temp,
|
||||||
"intent outside defined range");
|
"intent outside defined range");
|
||||||
|
|
||||||
/* At this point the tag table can't be checked because it hasn't necessarily
|
/* At this point the tag table can't be checked because it hasn't necessarily
|
||||||
* been loaded; however, various header fields can be checked. These checks
|
* been loaded; however, various header fields can be checked. These checks
|
||||||
@ -2000,7 +2000,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
temp = png_get_uint_32(profile+36); /* signature 'ascp' */
|
temp = png_get_uint_32(profile+36); /* signature 'ascp' */
|
||||||
if (temp != 0x61637370)
|
if (temp != 0x61637370)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"invalid signature");
|
"invalid signature");
|
||||||
|
|
||||||
/* Currently the PCS illuminant/adopted white point (the computational
|
/* Currently the PCS illuminant/adopted white point (the computational
|
||||||
* white point) are required to be D50,
|
* white point) are required to be D50,
|
||||||
@ -2011,7 +2011,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
*/
|
*/
|
||||||
if (memcmp(profile+68, D50_nCIEXYZ, 12) != 0)
|
if (memcmp(profile+68, D50_nCIEXYZ, 12) != 0)
|
||||||
(void)png_icc_profile_error(png_ptr, NULL, name, 0/*no tag value*/,
|
(void)png_icc_profile_error(png_ptr, NULL, name, 0/*no tag value*/,
|
||||||
"PCS illuminant is not D50");
|
"PCS illuminant is not D50");
|
||||||
|
|
||||||
/* The PNG spec requires this:
|
/* The PNG spec requires this:
|
||||||
* "If the iCCP chunk is present, the image samples conform to the colour
|
* "If the iCCP chunk is present, the image samples conform to the colour
|
||||||
@ -2039,18 +2039,18 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
case 0x52474220: /* 'RGB ' */
|
case 0x52474220: /* 'RGB ' */
|
||||||
if ((color_type & PNG_COLOR_MASK_COLOR) == 0)
|
if ((color_type & PNG_COLOR_MASK_COLOR) == 0)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"RGB color space not permitted on grayscale PNG");
|
"RGB color space not permitted on grayscale PNG");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x47524159: /* 'GRAY' */
|
case 0x47524159: /* 'GRAY' */
|
||||||
if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
|
if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"Gray color space not permitted on RGB PNG");
|
"Gray color space not permitted on RGB PNG");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"invalid ICC profile color space");
|
"invalid ICC profile color space");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* It is up to the application to check that the profile class matches the
|
/* It is up to the application to check that the profile class matches the
|
||||||
@ -2075,7 +2075,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
case 0x61627374: /* 'abst' */
|
case 0x61627374: /* 'abst' */
|
||||||
/* May not be embedded in an image */
|
/* May not be embedded in an image */
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"invalid embedded Abstract ICC profile");
|
"invalid embedded Abstract ICC profile");
|
||||||
|
|
||||||
case 0x6c696e6b: /* 'link' */
|
case 0x6c696e6b: /* 'link' */
|
||||||
/* DeviceLink profiles cannot be interpreted in a non-device specific
|
/* DeviceLink profiles cannot be interpreted in a non-device specific
|
||||||
@ -2085,7 +2085,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* PNG.
|
* PNG.
|
||||||
*/
|
*/
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"unexpected DeviceLink ICC profile class");
|
"unexpected DeviceLink ICC profile class");
|
||||||
|
|
||||||
case 0x6e6d636c: /* 'nmcl' */
|
case 0x6e6d636c: /* 'nmcl' */
|
||||||
/* A NamedColor profile is also device specific, however it doesn't
|
/* A NamedColor profile is also device specific, however it doesn't
|
||||||
@ -2093,7 +2093,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* certainly it will fail the tests below.
|
* certainly it will fail the tests below.
|
||||||
*/
|
*/
|
||||||
(void)png_icc_profile_error(png_ptr, NULL, name, temp,
|
(void)png_icc_profile_error(png_ptr, NULL, name, temp,
|
||||||
"unexpected NamedColor ICC profile class");
|
"unexpected NamedColor ICC profile class");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -2103,7 +2103,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* understood profiles.
|
* understood profiles.
|
||||||
*/
|
*/
|
||||||
(void)png_icc_profile_error(png_ptr, NULL, name, temp,
|
(void)png_icc_profile_error(png_ptr, NULL, name, temp,
|
||||||
"unrecognized ICC profile class");
|
"unrecognized ICC profile class");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2119,7 +2119,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"unexpected ICC PCS encoding");
|
"unexpected ICC PCS encoding");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -2127,8 +2127,8 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_uint_32 profile_length,
|
png_const_charp name, png_uint_32 profile_length,
|
||||||
png_const_bytep profile /* header plus whole tag table */)
|
png_const_bytep profile /* header plus whole tag table */)
|
||||||
{
|
{
|
||||||
png_uint_32 tag_count = png_get_uint_32(profile+128);
|
png_uint_32 tag_count = png_get_uint_32(profile+128);
|
||||||
png_uint_32 itag;
|
png_uint_32 itag;
|
||||||
@ -2156,7 +2156,7 @@ png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
* alignment.
|
* alignment.
|
||||||
*/
|
*/
|
||||||
(void)png_icc_profile_error(png_ptr, NULL, name, tag_id,
|
(void)png_icc_profile_error(png_ptr, NULL, name, tag_id,
|
||||||
"ICC profile tag start not a multiple of 4");
|
"ICC profile tag start not a multiple of 4");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a hard error; potentially it can cause read outside the
|
/* This is a hard error; potentially it can cause read outside the
|
||||||
@ -2164,7 +2164,7 @@ png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
*/
|
*/
|
||||||
if (tag_start > profile_length || tag_length > profile_length - tag_start)
|
if (tag_start > profile_length || tag_length > profile_length - tag_start)
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, tag_id,
|
return png_icc_profile_error(png_ptr, colorspace, name, tag_id,
|
||||||
"ICC profile tag outside profile");
|
"ICC profile tag outside profile");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1; /* success, maybe with warnings */
|
return 1; /* success, maybe with warnings */
|
||||||
@ -2192,22 +2192,22 @@ static const struct
|
|||||||
*/
|
*/
|
||||||
/* adler32, crc32, MD5[4], intent, date, length, file-name */
|
/* adler32, crc32, MD5[4], intent, date, length, file-name */
|
||||||
PNG_ICC_CHECKSUM(0x0a3fd9f6, 0x3b8772b9,
|
PNG_ICC_CHECKSUM(0x0a3fd9f6, 0x3b8772b9,
|
||||||
PNG_MD5(0x29f83dde, 0xaff255ae, 0x7842fae4, 0xca83390d), 0, 0,
|
PNG_MD5(0x29f83dde, 0xaff255ae, 0x7842fae4, 0xca83390d), 0, 0,
|
||||||
"2009/03/27 21:36:31", 3048, "sRGB_IEC61966-2-1_black_scaled.icc")
|
"2009/03/27 21:36:31", 3048, "sRGB_IEC61966-2-1_black_scaled.icc")
|
||||||
|
|
||||||
/* ICC sRGB v2 perceptual no black-compensation: */
|
/* ICC sRGB v2 perceptual no black-compensation: */
|
||||||
PNG_ICC_CHECKSUM(0x4909e5e1, 0x427ebb21,
|
PNG_ICC_CHECKSUM(0x4909e5e1, 0x427ebb21,
|
||||||
PNG_MD5(0xc95bd637, 0xe95d8a3b, 0x0df38f99, 0xc1320389), 1, 0,
|
PNG_MD5(0xc95bd637, 0xe95d8a3b, 0x0df38f99, 0xc1320389), 1, 0,
|
||||||
"2009/03/27 21:37:45", 3052, "sRGB_IEC61966-2-1_no_black_scaling.icc")
|
"2009/03/27 21:37:45", 3052, "sRGB_IEC61966-2-1_no_black_scaling.icc")
|
||||||
|
|
||||||
PNG_ICC_CHECKSUM(0xfd2144a1, 0x306fd8ae,
|
PNG_ICC_CHECKSUM(0xfd2144a1, 0x306fd8ae,
|
||||||
PNG_MD5(0xfc663378, 0x37e2886b, 0xfd72e983, 0x8228f1b8), 0, 0,
|
PNG_MD5(0xfc663378, 0x37e2886b, 0xfd72e983, 0x8228f1b8), 0, 0,
|
||||||
"2009/08/10 17:28:01", 60988, "sRGB_v4_ICC_preference_displayclass.icc")
|
"2009/08/10 17:28:01", 60988, "sRGB_v4_ICC_preference_displayclass.icc")
|
||||||
|
|
||||||
/* ICC sRGB v4 perceptual */
|
/* ICC sRGB v4 perceptual */
|
||||||
PNG_ICC_CHECKSUM(0x209c35d2, 0xbbef7812,
|
PNG_ICC_CHECKSUM(0x209c35d2, 0xbbef7812,
|
||||||
PNG_MD5(0x34562abf, 0x994ccd06, 0x6d2c5721, 0xd0d68c5d), 0, 0,
|
PNG_MD5(0x34562abf, 0x994ccd06, 0x6d2c5721, 0xd0d68c5d), 0, 0,
|
||||||
"2007/07/25 00:05:37", 60960, "sRGB_v4_ICC_preference.icc")
|
"2007/07/25 00:05:37", 60960, "sRGB_v4_ICC_preference.icc")
|
||||||
|
|
||||||
/* The following profiles have no known MD5 checksum. If there is a match
|
/* The following profiles have no known MD5 checksum. If there is a match
|
||||||
* on the (empty) MD5 the other fields are used to attempt a match and
|
* on the (empty) MD5 the other fields are used to attempt a match and
|
||||||
@ -2215,8 +2215,8 @@ static const struct
|
|||||||
* which suggests that they were also made by Hewlett Packard.
|
* which suggests that they were also made by Hewlett Packard.
|
||||||
*/
|
*/
|
||||||
PNG_ICC_CHECKSUM(0xa054d762, 0x5d5129ce,
|
PNG_ICC_CHECKSUM(0xa054d762, 0x5d5129ce,
|
||||||
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 0,
|
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 0,
|
||||||
"2004/07/21 18:57:42", 3024, "sRGB_IEC61966-2-1_noBPC.icc")
|
"2004/07/21 18:57:42", 3024, "sRGB_IEC61966-2-1_noBPC.icc")
|
||||||
|
|
||||||
/* This is a 'mntr' (display) profile with a mediaWhitePointTag that does not
|
/* This is a 'mntr' (display) profile with a mediaWhitePointTag that does not
|
||||||
* match the D50 PCS illuminant in the header (it is in fact the D65 values,
|
* match the D50 PCS illuminant in the header (it is in fact the D65 values,
|
||||||
@ -2226,17 +2226,17 @@ static const struct
|
|||||||
* chromaticAdaptationTag.
|
* chromaticAdaptationTag.
|
||||||
*/
|
*/
|
||||||
PNG_ICC_CHECKSUM(0xf784f3fb, 0x182ea552,
|
PNG_ICC_CHECKSUM(0xf784f3fb, 0x182ea552,
|
||||||
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 0, 1/*broken*/,
|
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 0, 1/*broken*/,
|
||||||
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 perceptual")
|
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 perceptual")
|
||||||
|
|
||||||
PNG_ICC_CHECKSUM(0x0398f3fc, 0xf29e526d,
|
PNG_ICC_CHECKSUM(0x0398f3fc, 0xf29e526d,
|
||||||
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 1/*broken*/,
|
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 1/*broken*/,
|
||||||
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 media-relative")
|
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 media-relative")
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
||||||
png_const_bytep profile, uLong adler)
|
png_const_bytep profile, uLong adler)
|
||||||
{
|
{
|
||||||
/* The quick check is to verify just the MD5 signature and trust the
|
/* The quick check is to verify just the MD5 signature and trust the
|
||||||
* rest of the data. Because the profile has already been verified for
|
* rest of the data. Because the profile has already been verified for
|
||||||
@ -2320,7 +2320,7 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
|||||||
* which is made irrelevant by this error.
|
* which is made irrelevant by this error.
|
||||||
*/
|
*/
|
||||||
png_chunk_report(png_ptr, "known incorrect sRGB profile",
|
png_chunk_report(png_ptr, "known incorrect sRGB profile",
|
||||||
PNG_CHUNK_ERROR);
|
PNG_CHUNK_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Warn that this being done; this isn't even an error since
|
/* Warn that this being done; this isn't even an error since
|
||||||
@ -2330,8 +2330,8 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
|||||||
else if (png_sRGB_checks[i].have_md5 == 0)
|
else if (png_sRGB_checks[i].have_md5 == 0)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr,
|
png_chunk_report(png_ptr,
|
||||||
"out-of-date sRGB profile with no signature",
|
"out-of-date sRGB profile with no signature",
|
||||||
PNG_CHUNK_WARNING);
|
PNG_CHUNK_WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1+png_sRGB_checks[i].is_broken;
|
return 1+png_sRGB_checks[i].is_broken;
|
||||||
@ -2354,38 +2354,36 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
return 0; /* no match */
|
return 0; /* no match */
|
||||||
}
|
}
|
||||||
#endif /* PNG_sRGB_PROFILE_CHECKS >= 0 */
|
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_icc_set_sRGB(png_const_structrp png_ptr,
|
png_icc_set_sRGB(png_const_structrp png_ptr,
|
||||||
png_colorspacerp colorspace, png_const_bytep profile, uLong adler)
|
png_colorspacerp colorspace, png_const_bytep profile, uLong adler)
|
||||||
{
|
{
|
||||||
/* Is this profile one of the known ICC sRGB profiles? If it is, just set
|
/* Is this profile one of the known ICC sRGB profiles? If it is, just set
|
||||||
* the sRGB information.
|
* the sRGB information.
|
||||||
*/
|
*/
|
||||||
#if PNG_sRGB_PROFILE_CHECKS >= 0
|
|
||||||
if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
|
if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
|
||||||
#endif
|
|
||||||
(void)png_colorspace_set_sRGB(png_ptr, colorspace,
|
(void)png_colorspace_set_sRGB(png_ptr, colorspace,
|
||||||
(int)/*already checked*/png_get_uint_32(profile+64));
|
(int)/*already checked*/png_get_uint_32(profile+64));
|
||||||
}
|
}
|
||||||
|
#endif /* PNG_sRGB_PROFILE_CHECKS >= 0 */
|
||||||
#endif /* sRGB */
|
#endif /* sRGB */
|
||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
png_const_charp name, png_uint_32 profile_length, png_const_bytep profile,
|
png_const_charp name, png_uint_32 profile_length, png_const_bytep profile,
|
||||||
int color_type)
|
int color_type)
|
||||||
{
|
{
|
||||||
if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
|
if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (png_icc_check_length(png_ptr, colorspace, name, profile_length) != 0 &&
|
if (png_icc_check_length(png_ptr, colorspace, name, profile_length) != 0 &&
|
||||||
png_icc_check_header(png_ptr, colorspace, name, profile_length, profile,
|
png_icc_check_header(png_ptr, colorspace, name, profile_length, profile,
|
||||||
color_type) != 0 &&
|
color_type) != 0 &&
|
||||||
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
||||||
profile) != 0)
|
profile) != 0)
|
||||||
{
|
{
|
||||||
# ifdef PNG_sRGB_SUPPORTED
|
# if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
|
||||||
/* If no sRGB support, don't try storing sRGB information */
|
/* If no sRGB support, don't try storing sRGB information */
|
||||||
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
||||||
# endif
|
# endif
|
||||||
@ -2444,7 +2442,7 @@ png_colorspace_set_rgb_coefficients(png_structrp png_ptr)
|
|||||||
/* Check for an internal error. */
|
/* Check for an internal error. */
|
||||||
if (r+g+b != 32768)
|
if (r+g+b != 32768)
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"internal error handling cHRM coefficients");
|
"internal error handling cHRM coefficients");
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2470,7 +2468,7 @@ png_colorspace_set_rgb_coefficients(png_structrp png_ptr)
|
|||||||
static int /* PRIVATE */
|
static int /* PRIVATE */
|
||||||
png_gt(size_t a, size_t b)
|
png_gt(size_t a, size_t b)
|
||||||
{
|
{
|
||||||
return a > b;
|
return a > b;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
# define png_gt(a,b) ((a) > (b))
|
# define png_gt(a,b) ((a) > (b))
|
||||||
@ -2478,9 +2476,9 @@ png_gt(size_t a, size_t b)
|
|||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_check_IHDR(png_const_structrp png_ptr,
|
png_check_IHDR(png_const_structrp png_ptr,
|
||||||
png_uint_32 width, png_uint_32 height, int bit_depth,
|
png_uint_32 width, png_uint_32 height, int bit_depth,
|
||||||
int color_type, int interlace_type, int compression_type,
|
int color_type, int interlace_type, int compression_type,
|
||||||
int filter_type)
|
int filter_type)
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
@ -2643,7 +2641,7 @@ png_check_IHDR(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
int /* PRIVATE */
|
int /* PRIVATE */
|
||||||
png_check_fp_number(png_const_charp string, png_size_t size, int *statep,
|
png_check_fp_number(png_const_charp string, png_size_t size, int *statep,
|
||||||
png_size_tp whereami)
|
png_size_tp whereami)
|
||||||
{
|
{
|
||||||
int state = *statep;
|
int state = *statep;
|
||||||
png_size_t i = *whereami;
|
png_size_t i = *whereami;
|
||||||
@ -3806,25 +3804,25 @@ png_gamma_16bit_correct(unsigned int value, png_fixed_point gamma_val)
|
|||||||
{
|
{
|
||||||
if (value > 0 && value < 65535)
|
if (value > 0 && value < 65535)
|
||||||
{
|
{
|
||||||
# ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
|
# ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
|
||||||
/* The same (unsigned int)->(double) constraints apply here as above,
|
/* The same (unsigned int)->(double) constraints apply here as above,
|
||||||
* however in this case the (unsigned int) to (int) conversion can
|
* however in this case the (unsigned int) to (int) conversion can
|
||||||
* overflow on an ANSI-C90 compliant system so the cast needs to ensure
|
* overflow on an ANSI-C90 compliant system so the cast needs to ensure
|
||||||
* that this is not possible.
|
* that this is not possible.
|
||||||
*/
|
*/
|
||||||
double r = floor(65535*pow((png_int_32)value/65535.,
|
double r = floor(65535*pow((png_int_32)value/65535.,
|
||||||
gamma_val*.00001)+.5);
|
gamma_val*.00001)+.5);
|
||||||
return (png_uint_16)r;
|
return (png_uint_16)r;
|
||||||
# else
|
# else
|
||||||
png_int_32 lg2 = png_log16bit(value);
|
png_int_32 lg2 = png_log16bit(value);
|
||||||
png_fixed_point res;
|
png_fixed_point res;
|
||||||
|
|
||||||
if (png_muldiv(&res, gamma_val, lg2, PNG_FP_1) != 0)
|
if (png_muldiv(&res, gamma_val, lg2, PNG_FP_1) != 0)
|
||||||
return png_exp16bit(res);
|
return png_exp16bit(res);
|
||||||
|
|
||||||
/* Overflow. */
|
/* Overflow. */
|
||||||
value = 0;
|
value = 0;
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return (png_uint_16)value;
|
return (png_uint_16)value;
|
||||||
@ -3863,7 +3861,7 @@ png_gamma_correct(png_structrp png_ptr, unsigned int value,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
|
png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
|
||||||
PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
|
PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
|
||||||
{
|
{
|
||||||
/* Various values derived from 'shift': */
|
/* Various values derived from 'shift': */
|
||||||
PNG_CONST unsigned int num = 1U << (8U - shift);
|
PNG_CONST unsigned int num = 1U << (8U - shift);
|
||||||
@ -3940,7 +3938,7 @@ png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
|
png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
|
||||||
PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
|
PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
|
||||||
{
|
{
|
||||||
PNG_CONST unsigned int num = 1U << (8U - shift);
|
PNG_CONST unsigned int num = 1U << (8U - shift);
|
||||||
PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
|
PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
|
||||||
@ -4008,7 +4006,7 @@ png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
png_build_8bit_table(png_structrp png_ptr, png_bytepp ptable,
|
png_build_8bit_table(png_structrp png_ptr, png_bytepp ptable,
|
||||||
PNG_CONST png_fixed_point gamma_val)
|
PNG_CONST png_fixed_point gamma_val)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
png_bytep table = *ptable = (png_bytep)png_malloc(png_ptr, 256);
|
png_bytep table = *ptable = (png_bytep)png_malloc(png_ptr, 256);
|
||||||
@ -4088,131 +4086,133 @@ png_destroy_gamma_table(png_structrp png_ptr)
|
|||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_build_gamma_table");
|
png_debug(1, "in png_build_gamma_table");
|
||||||
|
|
||||||
/* Remove any existing table; this copes with multiple calls to
|
/* Remove any existing table; this copes with multiple calls to
|
||||||
* png_read_update_info. The warning is because building the gamma tables
|
* png_read_update_info. The warning is because building the gamma tables
|
||||||
* multiple times is a performance hit - it's harmless but the ability to call
|
* multiple times is a performance hit - it's harmless but the ability to
|
||||||
* png_read_update_info() multiple times is new in 1.5.6 so it seems sensible
|
* call png_read_update_info() multiple times is new in 1.5.6 so it seems
|
||||||
* to warn if the app introduces such a hit.
|
* sensible to warn if the app introduces such a hit.
|
||||||
*/
|
*/
|
||||||
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "gamma table being rebuilt");
|
png_warning(png_ptr, "gamma table being rebuilt");
|
||||||
png_destroy_gamma_table(png_ptr);
|
png_destroy_gamma_table(png_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bit_depth <= 8)
|
if (bit_depth <= 8)
|
||||||
{
|
{
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
||||||
png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
|
png_ptr->screen_gamma > 0 ?
|
||||||
png_ptr->screen_gamma) : PNG_FP_1);
|
png_reciprocal2(png_ptr->colorspace.gamma,
|
||||||
|
png_ptr->screen_gamma) : PNG_FP_1);
|
||||||
|
|
||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
|
||||||
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
if ((png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY)) != 0)
|
if ((png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY)) != 0)
|
||||||
{
|
{
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_to_1,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_to_1,
|
||||||
png_reciprocal(png_ptr->colorspace.gamma));
|
png_reciprocal(png_ptr->colorspace.gamma));
|
||||||
|
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
|
||||||
png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
|
png_ptr->screen_gamma > 0 ?
|
||||||
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
png_reciprocal(png_ptr->screen_gamma) :
|
||||||
}
|
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
||||||
|
}
|
||||||
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
||||||
}
|
}
|
||||||
#ifdef PNG_16BIT_SUPPORTED
|
#ifdef PNG_16BIT_SUPPORTED
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_byte shift, sig_bit;
|
png_byte shift, sig_bit;
|
||||||
|
|
||||||
if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
|
if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
|
||||||
{
|
{
|
||||||
sig_bit = png_ptr->sig_bit.red;
|
sig_bit = png_ptr->sig_bit.red;
|
||||||
|
|
||||||
if (png_ptr->sig_bit.green > sig_bit)
|
if (png_ptr->sig_bit.green > sig_bit)
|
||||||
sig_bit = png_ptr->sig_bit.green;
|
sig_bit = png_ptr->sig_bit.green;
|
||||||
|
|
||||||
if (png_ptr->sig_bit.blue > sig_bit)
|
if (png_ptr->sig_bit.blue > sig_bit)
|
||||||
sig_bit = png_ptr->sig_bit.blue;
|
sig_bit = png_ptr->sig_bit.blue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sig_bit = png_ptr->sig_bit.gray;
|
sig_bit = png_ptr->sig_bit.gray;
|
||||||
|
|
||||||
/* 16-bit gamma code uses this equation:
|
/* 16-bit gamma code uses this equation:
|
||||||
*
|
*
|
||||||
* ov = table[(iv & 0xff) >> gamma_shift][iv >> 8]
|
* ov = table[(iv & 0xff) >> gamma_shift][iv >> 8]
|
||||||
*
|
*
|
||||||
* Where 'iv' is the input color value and 'ov' is the output value -
|
* Where 'iv' is the input color value and 'ov' is the output value -
|
||||||
* pow(iv, gamma).
|
* pow(iv, gamma).
|
||||||
*
|
*
|
||||||
* Thus the gamma table consists of up to 256 256-entry tables. The table
|
* Thus the gamma table consists of up to 256 256-entry tables. The table
|
||||||
* is selected by the (8-gamma_shift) most significant of the low 8 bits of
|
* is selected by the (8-gamma_shift) most significant of the low 8 bits
|
||||||
* the color value then indexed by the upper 8 bits:
|
* of the color value then indexed by the upper 8 bits:
|
||||||
*
|
*
|
||||||
* table[low bits][high 8 bits]
|
* table[low bits][high 8 bits]
|
||||||
*
|
*
|
||||||
* So the table 'n' corresponds to all those 'iv' of:
|
* So the table 'n' corresponds to all those 'iv' of:
|
||||||
*
|
*
|
||||||
* <all high 8-bit values><n << gamma_shift>..<(n+1 << gamma_shift)-1>
|
* <all high 8-bit values><n << gamma_shift>..<(n+1 << gamma_shift)-1>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (sig_bit > 0 && sig_bit < 16U)
|
if (sig_bit > 0 && sig_bit < 16U)
|
||||||
/* shift == insignificant bits */
|
/* shift == insignificant bits */
|
||||||
shift = (png_byte)((16U - sig_bit) & 0xff);
|
shift = (png_byte)((16U - sig_bit) & 0xff);
|
||||||
|
|
||||||
else
|
else
|
||||||
shift = 0; /* keep all 16 bits */
|
shift = 0; /* keep all 16 bits */
|
||||||
|
|
||||||
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
||||||
{
|
{
|
||||||
/* PNG_MAX_GAMMA_8 is the number of bits to keep - effectively
|
/* PNG_MAX_GAMMA_8 is the number of bits to keep - effectively
|
||||||
* the significant bits in the *input* when the output will
|
* the significant bits in the *input* when the output will
|
||||||
* eventually be 8 bits. By default it is 11.
|
* eventually be 8 bits. By default it is 11.
|
||||||
*/
|
*/
|
||||||
if (shift < (16U - PNG_MAX_GAMMA_8))
|
if (shift < (16U - PNG_MAX_GAMMA_8))
|
||||||
shift = (16U - PNG_MAX_GAMMA_8);
|
shift = (16U - PNG_MAX_GAMMA_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shift > 8U)
|
if (shift > 8U)
|
||||||
shift = 8U; /* Guarantees at least one table! */
|
shift = 8U; /* Guarantees at least one table! */
|
||||||
|
|
||||||
png_ptr->gamma_shift = shift;
|
png_ptr->gamma_shift = shift;
|
||||||
|
|
||||||
/* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
|
/* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
|
||||||
* PNG_COMPOSE). This effectively smashed the background calculation for
|
* PNG_COMPOSE). This effectively smashed the background calculation for
|
||||||
* 16-bit output because the 8-bit table assumes the result will be reduced
|
* 16-bit output because the 8-bit table assumes the result will be
|
||||||
* to 8 bits.
|
* reduced to 8 bits.
|
||||||
*/
|
*/
|
||||||
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
|
||||||
png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
||||||
png_ptr->screen_gamma > 0 ? png_product2(png_ptr->colorspace.gamma,
|
png_ptr->screen_gamma > 0 ? png_product2(png_ptr->colorspace.gamma,
|
||||||
png_ptr->screen_gamma) : PNG_FP_1);
|
png_ptr->screen_gamma) : PNG_FP_1);
|
||||||
|
|
||||||
else
|
else
|
||||||
png_build_16bit_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
png_build_16bit_table(png_ptr, &png_ptr->gamma_16_table, shift,
|
||||||
png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
|
png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
|
||||||
png_ptr->screen_gamma) : PNG_FP_1);
|
png_ptr->screen_gamma) : PNG_FP_1);
|
||||||
|
|
||||||
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
|
||||||
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
if ((png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY)) != 0)
|
if ((png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY)) != 0)
|
||||||
{
|
{
|
||||||
png_build_16bit_table(png_ptr, &png_ptr->gamma_16_to_1, shift,
|
png_build_16bit_table(png_ptr, &png_ptr->gamma_16_to_1, shift,
|
||||||
png_reciprocal(png_ptr->colorspace.gamma));
|
png_reciprocal(png_ptr->colorspace.gamma));
|
||||||
|
|
||||||
/* Notice that the '16 from 1' table should be full precision, however
|
/* Notice that the '16 from 1' table should be full precision, however
|
||||||
* the lookup on this table still uses gamma_shift, so it can't be.
|
* the lookup on this table still uses gamma_shift, so it can't be.
|
||||||
* TODO: fix this.
|
* TODO: fix this.
|
||||||
*/
|
*/
|
||||||
png_build_16bit_table(png_ptr, &png_ptr->gamma_16_from_1, shift,
|
png_build_16bit_table(png_ptr, &png_ptr->gamma_16_from_1, shift,
|
||||||
png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
|
png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
|
||||||
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
|
||||||
}
|
}
|
||||||
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
||||||
}
|
}
|
||||||
#endif /* 16BIT */
|
#endif /* 16BIT */
|
||||||
}
|
}
|
||||||
#endif /* READ_GAMMA */
|
#endif /* READ_GAMMA */
|
||||||
|
|||||||
149
png.h
149
png.h
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng version 1.6.23, June 9, 2016
|
* libpng version 1.6.24, August 4, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@ -12,7 +12,7 @@
|
|||||||
* Authors and maintainers:
|
* Authors and maintainers:
|
||||||
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
||||||
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
|
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
|
||||||
* libpng versions 0.97, January 1998, through 1.6.23, June 9, 2016:
|
* libpng versions 0.97, January 1998, through 1.6.24, August 4, 2016:
|
||||||
* Glenn Randers-Pehrson.
|
* Glenn Randers-Pehrson.
|
||||||
* See also "Contributing Authors", below.
|
* See also "Contributing Authors", below.
|
||||||
*/
|
*/
|
||||||
@ -29,7 +29,7 @@
|
|||||||
* files that are distributed with libpng have other copyright owners and
|
* files that are distributed with libpng have other copyright owners and
|
||||||
* are released under other open source licenses.
|
* are released under other open source licenses.
|
||||||
*
|
*
|
||||||
* libpng versions 1.0.7, July 1, 2000 through 1.6.23, June 9, 2016 are
|
* libpng versions 1.0.7, July 1, 2000 through 1.6.24, August 4, 2016 are
|
||||||
* Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
* Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
* derived from libpng-1.0.6, and are distributed according to the same
|
* derived from libpng-1.0.6, and are distributed according to the same
|
||||||
* disclaimer and license as libpng-1.0.6 with the following individuals
|
* disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
@ -217,7 +217,7 @@
|
|||||||
* ...
|
* ...
|
||||||
* 1.5.27 15 10527 15.so.15.27[.0]
|
* 1.5.27 15 10527 15.so.15.27[.0]
|
||||||
* ...
|
* ...
|
||||||
* 1.6.23 16 10623 16.so.16.23[.0]
|
* 1.6.24 16 10624 16.so.16.24[.0]
|
||||||
*
|
*
|
||||||
* Henceforth the source version will match the shared-library major
|
* Henceforth the source version will match the shared-library major
|
||||||
* and minor numbers; the shared-library major version number will be
|
* and minor numbers; the shared-library major version number will be
|
||||||
@ -245,13 +245,13 @@
|
|||||||
* Y2K compliance in libpng:
|
* Y2K compliance in libpng:
|
||||||
* =========================
|
* =========================
|
||||||
*
|
*
|
||||||
* June 9, 2016
|
* August 4, 2016
|
||||||
*
|
*
|
||||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
* an official declaration.
|
* an official declaration.
|
||||||
*
|
*
|
||||||
* This is your unofficial assurance that libpng from version 0.71 and
|
* This is your unofficial assurance that libpng from version 0.71 and
|
||||||
* upward through 1.6.23 are Y2K compliant. It is my belief that
|
* upward through 1.6.24 are Y2K compliant. It is my belief that
|
||||||
* earlier versions were also Y2K compliant.
|
* earlier versions were also Y2K compliant.
|
||||||
*
|
*
|
||||||
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
@ -313,9 +313,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Version information for png.h - this should match the version in png.c */
|
/* Version information for png.h - this should match the version in png.c */
|
||||||
#define PNG_LIBPNG_VER_STRING "1.6.23"
|
#define PNG_LIBPNG_VER_STRING "1.6.24"
|
||||||
#define PNG_HEADER_VERSION_STRING \
|
#define PNG_HEADER_VERSION_STRING " libpng version 1.6.24 - August 4, 2016\n"
|
||||||
" libpng version 1.6.23 - June 9, 2016\n"
|
|
||||||
|
|
||||||
#define PNG_LIBPNG_VER_SONUM 16
|
#define PNG_LIBPNG_VER_SONUM 16
|
||||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||||
@ -323,7 +322,7 @@
|
|||||||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||||
#define PNG_LIBPNG_VER_MAJOR 1
|
#define PNG_LIBPNG_VER_MAJOR 1
|
||||||
#define PNG_LIBPNG_VER_MINOR 6
|
#define PNG_LIBPNG_VER_MINOR 6
|
||||||
#define PNG_LIBPNG_VER_RELEASE 23
|
#define PNG_LIBPNG_VER_RELEASE 24
|
||||||
|
|
||||||
/* This should match the numeric part of the final component of
|
/* This should match the numeric part of the final component of
|
||||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
||||||
@ -354,20 +353,20 @@
|
|||||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
||||||
*/
|
*/
|
||||||
#define PNG_LIBPNG_VER 10623 /* 1.6.23 */
|
#define PNG_LIBPNG_VER 10624 /* 1.6.24 */
|
||||||
|
|
||||||
/* Library configuration: these options cannot be changed after
|
/* Library configuration: these options cannot be changed after
|
||||||
* the library has been built.
|
* the library has been built.
|
||||||
*/
|
*/
|
||||||
#ifndef PNGLCONF_H
|
#ifndef PNGLCONF_H
|
||||||
/* If pnglibconf.h is missing, you can
|
/* If pnglibconf.h is missing, you can
|
||||||
* copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
|
* copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
|
||||||
*/
|
*/
|
||||||
# include "pnglibconf.h"
|
# include "pnglibconf.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_VERSION_INFO_ONLY
|
#ifndef PNG_VERSION_INFO_ONLY
|
||||||
/* Machine specific configuration. */
|
/* Machine specific configuration. */
|
||||||
# include "pngconf.h"
|
# include "pngconf.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -464,7 +463,7 @@ extern "C" {
|
|||||||
/* This triggers a compiler error in png.c, if png.c and png.h
|
/* This triggers a compiler error in png.c, if png.c and png.h
|
||||||
* do not agree upon the version number.
|
* do not agree upon the version number.
|
||||||
*/
|
*/
|
||||||
typedef char* png_libpng_version_1_6_23;
|
typedef char* png_libpng_version_1_6_24;
|
||||||
|
|
||||||
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
||||||
*
|
*
|
||||||
@ -657,17 +656,17 @@ typedef png_time * * png_timepp;
|
|||||||
*/
|
*/
|
||||||
typedef struct png_unknown_chunk_t
|
typedef struct png_unknown_chunk_t
|
||||||
{
|
{
|
||||||
png_byte name[5]; /* Textual chunk name with '\0' terminator */
|
png_byte name[5]; /* Textual chunk name with '\0' terminator */
|
||||||
png_byte *data; /* Data, should not be modified on read! */
|
png_byte *data; /* Data, should not be modified on read! */
|
||||||
png_size_t size;
|
png_size_t size;
|
||||||
|
|
||||||
/* On write 'location' must be set using the flag values listed below.
|
/* On write 'location' must be set using the flag values listed below.
|
||||||
* Notice that on read it is set by libpng however the values stored have
|
* Notice that on read it is set by libpng however the values stored have
|
||||||
* more bits set than are listed below. Always treat the value as a
|
* more bits set than are listed below. Always treat the value as a
|
||||||
* bitmask. On write set only one bit - setting multiple bits may cause the
|
* bitmask. On write set only one bit - setting multiple bits may cause the
|
||||||
* chunk to be written in multiple places.
|
* chunk to be written in multiple places.
|
||||||
*/
|
*/
|
||||||
png_byte location; /* mode of operation at read time */
|
png_byte location; /* mode of operation at read time */
|
||||||
}
|
}
|
||||||
png_unknown_chunk;
|
png_unknown_chunk;
|
||||||
|
|
||||||
@ -2300,8 +2299,10 @@ PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
|
|||||||
* except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
|
* except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
|
||||||
* be processed by libpng.
|
* be processed by libpng.
|
||||||
*/
|
*/
|
||||||
|
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
||||||
int keep, png_const_bytep chunk_list, int num_chunks));
|
int keep, png_const_bytep chunk_list, int num_chunks));
|
||||||
|
#endif /* HANDLE_AS_UNKNOWN */
|
||||||
|
|
||||||
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
|
/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
|
||||||
* the result is therefore true (non-zero) if special handling is required,
|
* the result is therefore true (non-zero) if special handling is required,
|
||||||
@ -2309,7 +2310,7 @@ PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
|
|||||||
*/
|
*/
|
||||||
PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
|
PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
|
||||||
png_const_bytep chunk_name));
|
png_const_bytep chunk_name));
|
||||||
#endif
|
#endif /* SET_UNKNOWN_CHUNKS */
|
||||||
|
|
||||||
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
|
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
|
||||||
@ -2530,33 +2531,37 @@ PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,
|
|||||||
|
|
||||||
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
|
/* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
|
||||||
|
|
||||||
# define png_composite(composite, fg, alpha, bg) \
|
# define png_composite(composite, fg, alpha, bg) \
|
||||||
{ png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
|
{ \
|
||||||
* (png_uint_16)(alpha) \
|
png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
|
||||||
+ (png_uint_16)(bg)*(png_uint_16)(255 \
|
* (png_uint_16)(alpha) \
|
||||||
- (png_uint_16)(alpha)) + 128); \
|
+ (png_uint_16)(bg)*(png_uint_16)(255 \
|
||||||
(composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); }
|
- (png_uint_16)(alpha)) + 128); \
|
||||||
|
(composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); \
|
||||||
|
}
|
||||||
|
|
||||||
# define png_composite_16(composite, fg, alpha, bg) \
|
# define png_composite_16(composite, fg, alpha, bg) \
|
||||||
{ png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \
|
{ \
|
||||||
* (png_uint_32)(alpha) \
|
png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \
|
||||||
+ (png_uint_32)(bg)*(65535 \
|
* (png_uint_32)(alpha) \
|
||||||
- (png_uint_32)(alpha)) + 32768); \
|
+ (png_uint_32)(bg)*(65535 \
|
||||||
(composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); }
|
- (png_uint_32)(alpha)) + 32768); \
|
||||||
|
(composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); \
|
||||||
|
}
|
||||||
|
|
||||||
#else /* Standard method using integer division */
|
#else /* Standard method using integer division */
|
||||||
|
|
||||||
# define png_composite(composite, fg, alpha, bg) \
|
# define png_composite(composite, fg, alpha, bg) \
|
||||||
(composite) = \
|
(composite) = \
|
||||||
(png_byte)(0xff & (((png_uint_16)(fg) * (png_uint_16)(alpha) + \
|
(png_byte)(0xff & (((png_uint_16)(fg) * (png_uint_16)(alpha) + \
|
||||||
(png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \
|
(png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \
|
||||||
127) / 255))
|
127) / 255))
|
||||||
|
|
||||||
# define png_composite_16(composite, fg, alpha, bg) \
|
# define png_composite_16(composite, fg, alpha, bg) \
|
||||||
(composite) = \
|
(composite) = \
|
||||||
(png_uint_16)(0xffff & (((png_uint_32)(fg) * (png_uint_32)(alpha) + \
|
(png_uint_16)(0xffff & (((png_uint_32)(fg) * (png_uint_32)(alpha) + \
|
||||||
(png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \
|
(png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \
|
||||||
32767) / 65535))
|
32767) / 65535))
|
||||||
#endif /* READ_COMPOSITE_NODIV */
|
#endif /* READ_COMPOSITE_NODIV */
|
||||||
|
|
||||||
#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
|
#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
|
||||||
@ -2592,38 +2597,38 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
|||||||
* format for negative values, which is almost certainly true.
|
* format for negative values, which is almost certainly true.
|
||||||
*/
|
*/
|
||||||
# define PNG_get_uint_32(buf) \
|
# define PNG_get_uint_32(buf) \
|
||||||
(((png_uint_32)(*(buf)) << 24) + \
|
(((png_uint_32)(*(buf)) << 24) + \
|
||||||
((png_uint_32)(*((buf) + 1)) << 16) + \
|
((png_uint_32)(*((buf) + 1)) << 16) + \
|
||||||
((png_uint_32)(*((buf) + 2)) << 8) + \
|
((png_uint_32)(*((buf) + 2)) << 8) + \
|
||||||
((png_uint_32)(*((buf) + 3))))
|
((png_uint_32)(*((buf) + 3))))
|
||||||
|
|
||||||
/* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
|
/* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
|
||||||
* function) incorrectly returned a value of type png_uint_32.
|
* function) incorrectly returned a value of type png_uint_32.
|
||||||
*/
|
*/
|
||||||
# define PNG_get_uint_16(buf) \
|
# define PNG_get_uint_16(buf) \
|
||||||
((png_uint_16) \
|
((png_uint_16) \
|
||||||
(((unsigned int)(*(buf)) << 8) + \
|
(((unsigned int)(*(buf)) << 8) + \
|
||||||
((unsigned int)(*((buf) + 1)))))
|
((unsigned int)(*((buf) + 1)))))
|
||||||
|
|
||||||
# define PNG_get_int_32(buf) \
|
# define PNG_get_int_32(buf) \
|
||||||
((png_int_32)((*(buf) & 0x80) \
|
((png_int_32)((*(buf) & 0x80) \
|
||||||
? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \
|
? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \
|
||||||
: (png_int_32)png_get_uint_32(buf)))
|
: (png_int_32)png_get_uint_32(buf)))
|
||||||
|
|
||||||
/* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h,
|
/* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h,
|
||||||
* but defining a macro name prefixed with PNG_PREFIX.
|
* but defining a macro name prefixed with PNG_PREFIX.
|
||||||
*/
|
*/
|
||||||
# ifndef PNG_PREFIX
|
# ifndef PNG_PREFIX
|
||||||
# define png_get_uint_32(buf) PNG_get_uint_32(buf)
|
# define png_get_uint_32(buf) PNG_get_uint_32(buf)
|
||||||
# define png_get_uint_16(buf) PNG_get_uint_16(buf)
|
# define png_get_uint_16(buf) PNG_get_uint_16(buf)
|
||||||
# define png_get_int_32(buf) PNG_get_int_32(buf)
|
# define png_get_int_32(buf) PNG_get_int_32(buf)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef PNG_PREFIX
|
# ifdef PNG_PREFIX
|
||||||
/* No macros; revert to the (redefined) function */
|
/* No macros; revert to the (redefined) function */
|
||||||
# define PNG_get_uint_32 (png_get_uint_32)
|
# define PNG_get_uint_32 (png_get_uint_32)
|
||||||
# define PNG_get_uint_16 (png_get_uint_16)
|
# define PNG_get_uint_16 (png_get_uint_16)
|
||||||
# define PNG_get_int_32 (png_get_int_32)
|
# define PNG_get_int_32 (png_get_int_32)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3171,9 +3176,9 @@ PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory,
|
|||||||
#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\
|
#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\
|
||||||
((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\
|
((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\
|
||||||
(((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\
|
(((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\
|
||||||
12U+3U*(image).colormap_entries/*PLTE data*/+\
|
12U+3U*(image).colormap_entries/*PLTE data*/+\
|
||||||
(((image).format&PNG_FORMAT_FLAG_ALPHA)?\
|
(((image).format&PNG_FORMAT_FLAG_ALPHA)?\
|
||||||
12U/*tRNS*/+(image).colormap_entries:0U):0U)+\
|
12U/*tRNS*/+(image).colormap_entries:0U):0U)+\
|
||||||
12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size))
|
12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size))
|
||||||
/* A helper for the following macro; if your compiler cannot handle the
|
/* A helper for the following macro; if your compiler cannot handle the
|
||||||
* following macro use this one with the result of
|
* following macro use this one with the result of
|
||||||
|
|||||||
46
pngconf.h
46
pngconf.h
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng version 1.6.23, June 9, 2016
|
* libpng version 1.6.24, August 4, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -188,27 +188,27 @@
|
|||||||
* compatible with GCC or Visual C because of different calling conventions.
|
* compatible with GCC or Visual C because of different calling conventions.
|
||||||
*/
|
*/
|
||||||
# if PNG_API_RULE == 2
|
# if PNG_API_RULE == 2
|
||||||
/* If this line results in an error, either because __watcall is not
|
/* If this line results in an error, either because __watcall is not
|
||||||
* understood or because of a redefine just below you cannot use *this*
|
* understood or because of a redefine just below you cannot use *this*
|
||||||
* build of the library with the compiler you are using. *This* build was
|
* build of the library with the compiler you are using. *This* build was
|
||||||
* build using Watcom and applications must also be built using Watcom!
|
* build using Watcom and applications must also be built using Watcom!
|
||||||
*/
|
*/
|
||||||
# define PNGCAPI __watcall
|
# define PNGCAPI __watcall
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800))
|
# if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800))
|
||||||
# define PNGCAPI __cdecl
|
# define PNGCAPI __cdecl
|
||||||
# if PNG_API_RULE == 1
|
# if PNG_API_RULE == 1
|
||||||
/* If this line results in an error __stdcall is not understood and
|
/* If this line results in an error __stdcall is not understood and
|
||||||
* PNG_API_RULE should not have been set to '1'.
|
* PNG_API_RULE should not have been set to '1'.
|
||||||
*/
|
*/
|
||||||
# define PNGAPI __stdcall
|
# define PNGAPI __stdcall
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
/* An older compiler, or one not detected (erroneously) above,
|
/* An older compiler, or one not detected (erroneously) above,
|
||||||
* if necessary override on the command line to get the correct
|
* if necessary override on the command line to get the correct
|
||||||
* variants for the compiler.
|
* variants for the compiler.
|
||||||
*/
|
*/
|
||||||
# ifndef PNGCAPI
|
# ifndef PNGCAPI
|
||||||
# define PNGCAPI _cdecl
|
# define PNGCAPI _cdecl
|
||||||
# endif
|
# endif
|
||||||
@ -225,10 +225,10 @@
|
|||||||
|
|
||||||
# if (defined(_MSC_VER) && _MSC_VER < 800) ||\
|
# if (defined(_MSC_VER) && _MSC_VER < 800) ||\
|
||||||
(defined(__BORLANDC__) && __BORLANDC__ < 0x500)
|
(defined(__BORLANDC__) && __BORLANDC__ < 0x500)
|
||||||
/* older Borland and MSC
|
/* older Borland and MSC
|
||||||
* compilers used '__export' and required this to be after
|
* compilers used '__export' and required this to be after
|
||||||
* the type.
|
* the type.
|
||||||
*/
|
*/
|
||||||
# ifndef PNG_EXPORT_TYPE
|
# ifndef PNG_EXPORT_TYPE
|
||||||
# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP
|
# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP
|
||||||
# endif
|
# endif
|
||||||
@ -244,9 +244,9 @@
|
|||||||
# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
|
# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
|
||||||
# define PNGAPI _System
|
# define PNGAPI _System
|
||||||
# else /* !Windows/x86 && !OS/2 */
|
# else /* !Windows/x86 && !OS/2 */
|
||||||
/* Use the defaults, or define PNG*API on the command line (but
|
/* Use the defaults, or define PNG*API on the command line (but
|
||||||
* this will have to be done for every compile!)
|
* this will have to be done for every compile!)
|
||||||
*/
|
*/
|
||||||
# endif /* other system, !OS/2 */
|
# endif /* other system, !OS/2 */
|
||||||
#endif /* !Windows/x86 */
|
#endif /* !Windows/x86 */
|
||||||
|
|
||||||
@ -267,7 +267,7 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef PNG_IMPEXP
|
#ifndef PNG_IMPEXP
|
||||||
# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT)
|
# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT)
|
||||||
/* This forces use of a DLL, disallowing static linking */
|
/* This forces use of a DLL, disallowing static linking */
|
||||||
# define PNG_IMPEXP PNG_DLL_IMPORT
|
# define PNG_IMPEXP PNG_DLL_IMPORT
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@ -340,7 +340,7 @@
|
|||||||
* less efficient code.
|
* less efficient code.
|
||||||
*/
|
*/
|
||||||
# if defined(__clang__) && defined(__has_attribute)
|
# if defined(__clang__) && defined(__has_attribute)
|
||||||
/* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */
|
/* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */
|
||||||
# if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__)
|
# if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__)
|
||||||
# define PNG_USE_RESULT __attribute__((__warn_unused_result__))
|
# define PNG_USE_RESULT __attribute__((__warn_unused_result__))
|
||||||
# endif
|
# endif
|
||||||
|
|||||||
70
pngerror.c
70
pngerror.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -26,7 +26,7 @@ static PNG_FUNCTION(void, png_default_error,PNGARG((png_const_structrp png_ptr,
|
|||||||
#ifdef PNG_WARNINGS_SUPPORTED
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
static void /* PRIVATE */
|
static void /* PRIVATE */
|
||||||
png_default_warning PNGARG((png_const_structrp png_ptr,
|
png_default_warning PNGARG((png_const_structrp png_ptr,
|
||||||
png_const_charp warning_message));
|
png_const_charp warning_message));
|
||||||
#endif /* WARNINGS */
|
#endif /* WARNINGS */
|
||||||
|
|
||||||
/* This function is called whenever there is a fatal error. This function
|
/* This function is called whenever there is a fatal error. This function
|
||||||
@ -37,7 +37,7 @@ png_default_warning PNGARG((png_const_structrp png_ptr,
|
|||||||
#ifdef PNG_ERROR_TEXT_SUPPORTED
|
#ifdef PNG_ERROR_TEXT_SUPPORTED
|
||||||
PNG_FUNCTION(void,PNGAPI
|
PNG_FUNCTION(void,PNGAPI
|
||||||
png_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
png_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
||||||
PNG_NORETURN)
|
PNG_NORETURN)
|
||||||
{
|
{
|
||||||
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
char msg[16];
|
char msg[16];
|
||||||
@ -65,18 +65,18 @@ png_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
|||||||
|
|
||||||
else
|
else
|
||||||
error_message += offset;
|
error_message += offset;
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ((png_ptr->flags & PNG_FLAG_STRIP_ERROR_TEXT) != 0)
|
|
||||||
{
|
|
||||||
msg[0] = '0';
|
|
||||||
msg[1] = '\0';
|
|
||||||
error_message = msg;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
else
|
||||||
|
{
|
||||||
|
if ((png_ptr->flags & PNG_FLAG_STRIP_ERROR_TEXT) != 0)
|
||||||
|
{
|
||||||
|
msg[0] = '0';
|
||||||
|
msg[1] = '\0';
|
||||||
|
error_message = msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (png_ptr != NULL && png_ptr->error_fn != NULL)
|
if (png_ptr != NULL && png_ptr->error_fn != NULL)
|
||||||
@ -110,7 +110,7 @@ png_err,(png_const_structrp png_ptr),PNG_NORETURN)
|
|||||||
*/
|
*/
|
||||||
size_t
|
size_t
|
||||||
png_safecat(png_charp buffer, size_t bufsize, size_t pos,
|
png_safecat(png_charp buffer, size_t bufsize, size_t pos,
|
||||||
png_const_charp string)
|
png_const_charp string)
|
||||||
{
|
{
|
||||||
if (buffer != NULL && pos < bufsize)
|
if (buffer != NULL && pos < bufsize)
|
||||||
{
|
{
|
||||||
@ -131,7 +131,7 @@ png_safecat(png_charp buffer, size_t bufsize, size_t pos,
|
|||||||
*/
|
*/
|
||||||
png_charp
|
png_charp
|
||||||
png_format_number(png_const_charp start, png_charp end, int format,
|
png_format_number(png_const_charp start, png_charp end, int format,
|
||||||
png_alloc_size_t number)
|
png_alloc_size_t number)
|
||||||
{
|
{
|
||||||
int count = 0; /* number of digits output */
|
int count = 0; /* number of digits output */
|
||||||
int mincount = 1; /* minimum number required */
|
int mincount = 1; /* minimum number required */
|
||||||
@ -233,7 +233,7 @@ png_warning(png_const_structrp png_ptr, png_const_charp warning_message)
|
|||||||
}
|
}
|
||||||
if (png_ptr != NULL && png_ptr->warning_fn != NULL)
|
if (png_ptr != NULL && png_ptr->warning_fn != NULL)
|
||||||
(*(png_ptr->warning_fn))(png_constcast(png_structrp,png_ptr),
|
(*(png_ptr->warning_fn))(png_constcast(png_structrp,png_ptr),
|
||||||
warning_message + offset);
|
warning_message + offset);
|
||||||
else
|
else
|
||||||
png_default_warning(png_ptr, warning_message + offset);
|
png_default_warning(png_ptr, warning_message + offset);
|
||||||
}
|
}
|
||||||
@ -245,7 +245,7 @@ png_warning(png_const_structrp png_ptr, png_const_charp warning_message)
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
png_warning_parameter(png_warning_parameters p, int number,
|
png_warning_parameter(png_warning_parameters p, int number,
|
||||||
png_const_charp string)
|
png_const_charp string)
|
||||||
{
|
{
|
||||||
if (number > 0 && number <= PNG_WARNING_PARAMETER_COUNT)
|
if (number > 0 && number <= PNG_WARNING_PARAMETER_COUNT)
|
||||||
(void)png_safecat(p[number-1], (sizeof p[number-1]), 0, string);
|
(void)png_safecat(p[number-1], (sizeof p[number-1]), 0, string);
|
||||||
@ -253,7 +253,7 @@ png_warning_parameter(png_warning_parameters p, int number,
|
|||||||
|
|
||||||
void
|
void
|
||||||
png_warning_parameter_unsigned(png_warning_parameters p, int number, int format,
|
png_warning_parameter_unsigned(png_warning_parameters p, int number, int format,
|
||||||
png_alloc_size_t value)
|
png_alloc_size_t value)
|
||||||
{
|
{
|
||||||
char buffer[PNG_NUMBER_BUFFER_SIZE];
|
char buffer[PNG_NUMBER_BUFFER_SIZE];
|
||||||
png_warning_parameter(p, number, PNG_FORMAT_NUMBER(buffer, format, value));
|
png_warning_parameter(p, number, PNG_FORMAT_NUMBER(buffer, format, value));
|
||||||
@ -261,7 +261,7 @@ png_warning_parameter_unsigned(png_warning_parameters p, int number, int format,
|
|||||||
|
|
||||||
void
|
void
|
||||||
png_warning_parameter_signed(png_warning_parameters p, int number, int format,
|
png_warning_parameter_signed(png_warning_parameters p, int number, int format,
|
||||||
png_int_32 value)
|
png_int_32 value)
|
||||||
{
|
{
|
||||||
png_alloc_size_t u;
|
png_alloc_size_t u;
|
||||||
png_charp str;
|
png_charp str;
|
||||||
@ -282,7 +282,7 @@ png_warning_parameter_signed(png_warning_parameters p, int number, int format,
|
|||||||
|
|
||||||
void
|
void
|
||||||
png_formatted_warning(png_const_structrp png_ptr, png_warning_parameters p,
|
png_formatted_warning(png_const_structrp png_ptr, png_warning_parameters p,
|
||||||
png_const_charp message)
|
png_const_charp message)
|
||||||
{
|
{
|
||||||
/* The internal buffer is just 192 bytes - enough for all our messages,
|
/* The internal buffer is just 192 bytes - enough for all our messages,
|
||||||
* overflow doesn't happen because this code checks! If someone figures
|
* overflow doesn't happen because this code checks! If someone figures
|
||||||
@ -391,10 +391,10 @@ png_benign_error(png_const_structrp png_ptr, png_const_charp error_message)
|
|||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_app_warning(png_const_structrp png_ptr, png_const_charp error_message)
|
png_app_warning(png_const_structrp png_ptr, png_const_charp error_message)
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags & PNG_FLAG_APP_WARNINGS_WARN) != 0)
|
if ((png_ptr->flags & PNG_FLAG_APP_WARNINGS_WARN) != 0)
|
||||||
png_warning(png_ptr, error_message);
|
png_warning(png_ptr, error_message);
|
||||||
else
|
else
|
||||||
png_error(png_ptr, error_message);
|
png_error(png_ptr, error_message);
|
||||||
|
|
||||||
# ifndef PNG_ERROR_TEXT_SUPPORTED
|
# ifndef PNG_ERROR_TEXT_SUPPORTED
|
||||||
PNG_UNUSED(error_message)
|
PNG_UNUSED(error_message)
|
||||||
@ -404,10 +404,10 @@ png_app_warning(png_const_structrp png_ptr, png_const_charp error_message)
|
|||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_app_error(png_const_structrp png_ptr, png_const_charp error_message)
|
png_app_error(png_const_structrp png_ptr, png_const_charp error_message)
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags & PNG_FLAG_APP_ERRORS_WARN) != 0)
|
if ((png_ptr->flags & PNG_FLAG_APP_ERRORS_WARN) != 0)
|
||||||
png_warning(png_ptr, error_message);
|
png_warning(png_ptr, error_message);
|
||||||
else
|
else
|
||||||
png_error(png_ptr, error_message);
|
png_error(png_ptr, error_message);
|
||||||
|
|
||||||
# ifndef PNG_ERROR_TEXT_SUPPORTED
|
# ifndef PNG_ERROR_TEXT_SUPPORTED
|
||||||
PNG_UNUSED(error_message)
|
PNG_UNUSED(error_message)
|
||||||
@ -478,7 +478,7 @@ png_format_buffer(png_const_structrp png_ptr, png_charp buffer, png_const_charp
|
|||||||
#if defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
|
#if defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
|
||||||
PNG_FUNCTION(void,PNGAPI
|
PNG_FUNCTION(void,PNGAPI
|
||||||
png_chunk_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
png_chunk_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
||||||
PNG_NORETURN)
|
PNG_NORETURN)
|
||||||
{
|
{
|
||||||
char msg[18+PNG_MAX_ERROR_TEXT];
|
char msg[18+PNG_MAX_ERROR_TEXT];
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
@ -620,7 +620,7 @@ png_set_longjmp_fn(png_structrp png_ptr, png_longjmp_ptr longjmp_fn,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
png_ptr->jmp_buf_ptr = png_voidcast(jmp_buf *,
|
png_ptr->jmp_buf_ptr = png_voidcast(jmp_buf *,
|
||||||
png_malloc_warn(png_ptr, jmp_buf_size));
|
png_malloc_warn(png_ptr, jmp_buf_size));
|
||||||
|
|
||||||
if (png_ptr->jmp_buf_ptr == NULL)
|
if (png_ptr->jmp_buf_ptr == NULL)
|
||||||
return NULL; /* new NULL return on OOM */
|
return NULL; /* new NULL return on OOM */
|
||||||
@ -709,7 +709,7 @@ png_free_jmpbuf(png_structrp png_ptr)
|
|||||||
*/
|
*/
|
||||||
static PNG_FUNCTION(void /* PRIVATE */,
|
static PNG_FUNCTION(void /* PRIVATE */,
|
||||||
png_default_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
png_default_error,(png_const_structrp png_ptr, png_const_charp error_message),
|
||||||
PNG_NORETURN)
|
PNG_NORETURN)
|
||||||
{
|
{
|
||||||
#ifdef PNG_CONSOLE_IO_SUPPORTED
|
#ifdef PNG_CONSOLE_IO_SUPPORTED
|
||||||
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
@ -883,7 +883,7 @@ png_set_strip_error_numbers(png_structrp png_ptr, png_uint_32 strip_mode)
|
|||||||
*/
|
*/
|
||||||
PNG_FUNCTION(void /* PRIVATE */, (PNGCBAPI
|
PNG_FUNCTION(void /* PRIVATE */, (PNGCBAPI
|
||||||
png_safe_error),(png_structp png_nonconst_ptr, png_const_charp error_message),
|
png_safe_error),(png_structp png_nonconst_ptr, png_const_charp error_message),
|
||||||
PNG_NORETURN)
|
PNG_NORETURN)
|
||||||
{
|
{
|
||||||
const png_const_structrp png_ptr = png_nonconst_ptr;
|
const png_const_structrp png_ptr = png_nonconst_ptr;
|
||||||
png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
|
png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
|
||||||
@ -906,7 +906,7 @@ png_safe_error),(png_structp png_nonconst_ptr, png_const_charp error_message),
|
|||||||
/* Missing longjmp buffer, the following is to help debugging: */
|
/* Missing longjmp buffer, the following is to help debugging: */
|
||||||
{
|
{
|
||||||
size_t pos = png_safecat(image->message, (sizeof image->message), 0,
|
size_t pos = png_safecat(image->message, (sizeof image->message), 0,
|
||||||
"bad longjmp: ");
|
"bad longjmp: ");
|
||||||
png_safecat(image->message, (sizeof image->message), pos,
|
png_safecat(image->message, (sizeof image->message), pos,
|
||||||
error_message);
|
error_message);
|
||||||
}
|
}
|
||||||
|
|||||||
56
pngget.c
56
pngget.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -486,7 +486,7 @@ png_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr)
|
|||||||
#ifdef PNG_bKGD_SUPPORTED
|
#ifdef PNG_bKGD_SUPPORTED
|
||||||
png_uint_32 PNGAPI
|
png_uint_32 PNGAPI
|
||||||
png_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
|
png_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
|
||||||
png_color_16p *background)
|
png_color_16p *background)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL &&
|
if (png_ptr != NULL && info_ptr != NULL &&
|
||||||
(info_ptr->valid & PNG_INFO_bKGD) != 0 &&
|
(info_ptr->valid & PNG_INFO_bKGD) != 0 &&
|
||||||
@ -526,28 +526,28 @@ png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
|||||||
|
|
||||||
if (white_x != NULL)
|
if (white_x != NULL)
|
||||||
*white_x = png_float(png_ptr,
|
*white_x = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
|
info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
|
||||||
if (white_y != NULL)
|
if (white_y != NULL)
|
||||||
*white_y = png_float(png_ptr,
|
*white_y = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y");
|
info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y");
|
||||||
if (red_x != NULL)
|
if (red_x != NULL)
|
||||||
*red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx,
|
*red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx,
|
||||||
"cHRM red X");
|
"cHRM red X");
|
||||||
if (red_y != NULL)
|
if (red_y != NULL)
|
||||||
*red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy,
|
*red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy,
|
||||||
"cHRM red Y");
|
"cHRM red Y");
|
||||||
if (green_x != NULL)
|
if (green_x != NULL)
|
||||||
*green_x = png_float(png_ptr,
|
*green_x = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_xy.greenx, "cHRM green X");
|
info_ptr->colorspace.end_points_xy.greenx, "cHRM green X");
|
||||||
if (green_y != NULL)
|
if (green_y != NULL)
|
||||||
*green_y = png_float(png_ptr,
|
*green_y = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y");
|
info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y");
|
||||||
if (blue_x != NULL)
|
if (blue_x != NULL)
|
||||||
*blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex,
|
*blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex,
|
||||||
"cHRM blue X");
|
"cHRM blue X");
|
||||||
if (blue_y != NULL)
|
if (blue_y != NULL)
|
||||||
*blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
|
*blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
|
||||||
"cHRM blue Y");
|
"cHRM blue Y");
|
||||||
return (PNG_INFO_cHRM);
|
return (PNG_INFO_cHRM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -556,42 +556,42 @@ png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
|||||||
|
|
||||||
png_uint_32 PNGAPI
|
png_uint_32 PNGAPI
|
||||||
png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
||||||
double *red_X, double *red_Y, double *red_Z, double *green_X,
|
double *red_X, double *red_Y, double *red_Z, double *green_X,
|
||||||
double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
|
double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
|
||||||
double *blue_Z)
|
double *blue_Z)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL && info_ptr != NULL &&
|
if (png_ptr != NULL && info_ptr != NULL &&
|
||||||
(info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
|
(info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
|
||||||
{
|
{
|
||||||
png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
|
png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
|
||||||
|
|
||||||
if (red_X != NULL)
|
if (red_X != NULL)
|
||||||
*red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
|
*red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
|
||||||
"cHRM red X");
|
"cHRM red X");
|
||||||
if (red_Y != NULL)
|
if (red_Y != NULL)
|
||||||
*red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y,
|
*red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y,
|
||||||
"cHRM red Y");
|
"cHRM red Y");
|
||||||
if (red_Z != NULL)
|
if (red_Z != NULL)
|
||||||
*red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z,
|
*red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z,
|
||||||
"cHRM red Z");
|
"cHRM red Z");
|
||||||
if (green_X != NULL)
|
if (green_X != NULL)
|
||||||
*green_X = png_float(png_ptr,
|
*green_X = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X");
|
info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X");
|
||||||
if (green_Y != NULL)
|
if (green_Y != NULL)
|
||||||
*green_Y = png_float(png_ptr,
|
*green_Y = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y");
|
info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y");
|
||||||
if (green_Z != NULL)
|
if (green_Z != NULL)
|
||||||
*green_Z = png_float(png_ptr,
|
*green_Z = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
|
info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
|
||||||
if (blue_X != NULL)
|
if (blue_X != NULL)
|
||||||
*blue_X = png_float(png_ptr,
|
*blue_X = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
|
info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
|
||||||
if (blue_Y != NULL)
|
if (blue_Y != NULL)
|
||||||
*blue_Y = png_float(png_ptr,
|
*blue_Y = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
|
info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
|
||||||
if (blue_Z != NULL)
|
if (blue_Z != NULL)
|
||||||
*blue_Z = png_float(png_ptr,
|
*blue_Z = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
|
info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
|
||||||
return (PNG_INFO_cHRM);
|
return (PNG_INFO_cHRM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -681,8 +681,8 @@ png_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
|||||||
png_debug1(1, "in %s retrieval function", "gAMA");
|
png_debug1(1, "in %s retrieval function", "gAMA");
|
||||||
|
|
||||||
if (png_ptr != NULL && info_ptr != NULL &&
|
if (png_ptr != NULL && info_ptr != NULL &&
|
||||||
(info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
|
(info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
|
||||||
file_gamma != NULL)
|
file_gamma != NULL)
|
||||||
{
|
{
|
||||||
*file_gamma = info_ptr->colorspace.gamma;
|
*file_gamma = info_ptr->colorspace.gamma;
|
||||||
return (PNG_INFO_gAMA);
|
return (PNG_INFO_gAMA);
|
||||||
@ -704,7 +704,7 @@ png_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
|||||||
file_gamma != NULL)
|
file_gamma != NULL)
|
||||||
{
|
{
|
||||||
*file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
|
*file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
|
||||||
"png_get_gAMA");
|
"png_get_gAMA");
|
||||||
return (PNG_INFO_gAMA);
|
return (PNG_INFO_gAMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -901,7 +901,7 @@ png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
|||||||
*/
|
*/
|
||||||
*width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
|
*width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
|
||||||
*height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
|
*height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
|
||||||
"sCAL height");
|
"sCAL height");
|
||||||
return (PNG_INFO_sCAL);
|
return (PNG_INFO_sCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
pngmem.c
20
pngmem.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngmem.c - stub functions for memory allocation
|
/* pngmem.c - stub functions for memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014,2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -66,7 +66,7 @@ png_calloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
*/
|
*/
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
||||||
png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
|
png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
|
||||||
PNG_ALLOCATED)
|
PNG_ALLOCATED)
|
||||||
{
|
{
|
||||||
/* Moved to png_malloc_base from png_malloc_default in 1.6.0; the DOS
|
/* Moved to png_malloc_base from png_malloc_default in 1.6.0; the DOS
|
||||||
* allocators have also been removed in 1.6.0, so any 16-bit system now has
|
* allocators have also been removed in 1.6.0, so any 16-bit system now has
|
||||||
@ -107,7 +107,7 @@ png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
|
|||||||
*/
|
*/
|
||||||
static png_voidp
|
static png_voidp
|
||||||
png_malloc_array_checked(png_const_structrp png_ptr, int nelements,
|
png_malloc_array_checked(png_const_structrp png_ptr, int nelements,
|
||||||
size_t element_size)
|
size_t element_size)
|
||||||
{
|
{
|
||||||
png_alloc_size_t req = nelements; /* known to be > 0 */
|
png_alloc_size_t req = nelements; /* known to be > 0 */
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ png_malloc_array_checked(png_const_structrp png_ptr, int nelements,
|
|||||||
|
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
||||||
png_malloc_array,(png_const_structrp png_ptr, int nelements,
|
png_malloc_array,(png_const_structrp png_ptr, int nelements,
|
||||||
size_t element_size),PNG_ALLOCATED)
|
size_t element_size),PNG_ALLOCATED)
|
||||||
{
|
{
|
||||||
if (nelements <= 0 || element_size == 0)
|
if (nelements <= 0 || element_size == 0)
|
||||||
png_error(png_ptr, "internal error: array alloc");
|
png_error(png_ptr, "internal error: array alloc");
|
||||||
@ -130,7 +130,7 @@ png_malloc_array,(png_const_structrp png_ptr, int nelements,
|
|||||||
|
|
||||||
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
PNG_FUNCTION(png_voidp /* PRIVATE */,
|
||||||
png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
|
png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
|
||||||
int old_elements, int add_elements, size_t element_size),PNG_ALLOCATED)
|
int old_elements, int add_elements, size_t element_size),PNG_ALLOCATED)
|
||||||
{
|
{
|
||||||
/* These are internal errors: */
|
/* These are internal errors: */
|
||||||
if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
|
if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
|
||||||
@ -143,7 +143,7 @@ png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
|
|||||||
if (add_elements <= INT_MAX - old_elements)
|
if (add_elements <= INT_MAX - old_elements)
|
||||||
{
|
{
|
||||||
png_voidp new_array = png_malloc_array_checked(png_ptr,
|
png_voidp new_array = png_malloc_array_checked(png_ptr,
|
||||||
old_elements+add_elements, element_size);
|
old_elements+add_elements, element_size);
|
||||||
|
|
||||||
if (new_array != NULL)
|
if (new_array != NULL)
|
||||||
{
|
{
|
||||||
@ -154,7 +154,7 @@ png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
|
|||||||
memcpy(new_array, old_array, element_size*(unsigned)old_elements);
|
memcpy(new_array, old_array, element_size*(unsigned)old_elements);
|
||||||
|
|
||||||
memset((char*)new_array + element_size*(unsigned)old_elements, 0,
|
memset((char*)new_array + element_size*(unsigned)old_elements, 0,
|
||||||
element_size*(unsigned)add_elements);
|
element_size*(unsigned)add_elements);
|
||||||
|
|
||||||
return new_array;
|
return new_array;
|
||||||
}
|
}
|
||||||
@ -187,7 +187,7 @@ png_malloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
|
|||||||
#ifdef PNG_USER_MEM_SUPPORTED
|
#ifdef PNG_USER_MEM_SUPPORTED
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
PNG_FUNCTION(png_voidp,PNGAPI
|
||||||
png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
|
png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
|
||||||
PNG_ALLOCATED PNG_DEPRECATED)
|
PNG_ALLOCATED PNG_DEPRECATED)
|
||||||
{
|
{
|
||||||
png_voidp ret;
|
png_voidp ret;
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
|
|||||||
*/
|
*/
|
||||||
PNG_FUNCTION(png_voidp,PNGAPI
|
PNG_FUNCTION(png_voidp,PNGAPI
|
||||||
png_malloc_warn,(png_const_structrp png_ptr, png_alloc_size_t size),
|
png_malloc_warn,(png_const_structrp png_ptr, png_alloc_size_t size),
|
||||||
PNG_ALLOCATED)
|
PNG_ALLOCATED)
|
||||||
{
|
{
|
||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
22
pngpread.c
22
pngpread.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.23 [June 9, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -77,11 +77,11 @@ png_process_data_pause(png_structrp png_ptr, int save)
|
|||||||
png_uint_32 PNGAPI
|
png_uint_32 PNGAPI
|
||||||
png_process_data_skip(png_structrp png_ptr)
|
png_process_data_skip(png_structrp png_ptr)
|
||||||
{
|
{
|
||||||
/* TODO: Deprecate and remove this API.
|
/* TODO: Deprecate and remove this API.
|
||||||
* Somewhere the implementation of this seems to have been lost,
|
* Somewhere the implementation of this seems to have been lost,
|
||||||
* or abandoned. It was only to support some internal back-door access
|
* or abandoned. It was only to support some internal back-door access
|
||||||
* to png_struct) in libpng-1.4.x.
|
* to png_struct) in libpng-1.4.x.
|
||||||
*/
|
*/
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"png_process_data_skip is not implemented in any current version of libpng");
|
"png_process_data_skip is not implemented in any current version of libpng");
|
||||||
return 0;
|
return 0;
|
||||||
@ -410,7 +410,7 @@ png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
{
|
{
|
||||||
PNG_PUSH_SAVE_BUFFER_IF_FULL
|
PNG_PUSH_SAVE_BUFFER_IF_FULL
|
||||||
png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length,
|
png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length,
|
||||||
PNG_HANDLE_CHUNK_AS_DEFAULT);
|
PNG_HANDLE_CHUNK_AS_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
|
png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
|
||||||
@ -521,7 +521,7 @@ png_push_save_buffer(png_structrp png_ptr)
|
|||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_push_restore_buffer(png_structrp png_ptr, png_bytep buffer,
|
png_push_restore_buffer(png_structrp png_ptr, png_bytep buffer,
|
||||||
png_size_t buffer_length)
|
png_size_t buffer_length)
|
||||||
{
|
{
|
||||||
png_ptr->current_buffer = buffer;
|
png_ptr->current_buffer = buffer;
|
||||||
png_ptr->current_buffer_size = buffer_length;
|
png_ptr->current_buffer_size = buffer_length;
|
||||||
@ -624,7 +624,7 @@ png_push_read_IDAT(png_structrp png_ptr)
|
|||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
|
png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
|
||||||
png_size_t buffer_length)
|
png_size_t buffer_length)
|
||||||
{
|
{
|
||||||
/* The caller checks for a non-zero buffer length. */
|
/* The caller checks for a non-zero buffer length. */
|
||||||
if (!(buffer_length > 0) || buffer == NULL)
|
if (!(buffer_length > 0) || buffer == NULL)
|
||||||
@ -782,7 +782,7 @@ png_push_process_row(png_structrp png_ptr)
|
|||||||
{
|
{
|
||||||
if (png_ptr->pass < 6)
|
if (png_ptr->pass < 6)
|
||||||
png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
|
png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
|
||||||
png_ptr->transformations);
|
png_ptr->transformations);
|
||||||
|
|
||||||
switch (png_ptr->pass)
|
switch (png_ptr->pass)
|
||||||
{
|
{
|
||||||
@ -1044,7 +1044,7 @@ png_push_have_row(png_structrp png_ptr, png_bytep row)
|
|||||||
{
|
{
|
||||||
if (png_ptr->row_fn != NULL)
|
if (png_ptr->row_fn != NULL)
|
||||||
(*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number,
|
(*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number,
|
||||||
(int)png_ptr->pass);
|
(int)png_ptr->pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
||||||
|
|||||||
32
pngpriv.h
32
pngpriv.h
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngpriv.h - private declarations for use inside libpng
|
/* pngpriv.h - private declarations for use inside libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [May 26, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -420,10 +420,10 @@
|
|||||||
|
|
||||||
# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
|
# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
|
||||||
defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
|
defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
|
||||||
/* We need to check that <math.h> hasn't already been included earlier
|
/* We need to check that <math.h> hasn't already been included earlier
|
||||||
* as it seems it doesn't agree with <fp.h>, yet we should really use
|
* as it seems it doesn't agree with <fp.h>, yet we should really use
|
||||||
* <fp.h> if possible.
|
* <fp.h> if possible.
|
||||||
*/
|
*/
|
||||||
# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
|
# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
|
||||||
# include <fp.h>
|
# include <fp.h>
|
||||||
# endif
|
# endif
|
||||||
@ -431,9 +431,9 @@
|
|||||||
# include <math.h>
|
# include <math.h>
|
||||||
# endif
|
# endif
|
||||||
# if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
|
# if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
|
||||||
/* Amiga SAS/C: We must include builtin FPU functions when compiling using
|
/* Amiga SAS/C: We must include builtin FPU functions when compiling using
|
||||||
* MATH=68881
|
* MATH=68881
|
||||||
*/
|
*/
|
||||||
# include <m68881.h>
|
# include <m68881.h>
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -1025,7 +1025,7 @@ PNG_INTERNAL_FUNCTION(void,png_write_sBIT,(png_structrp png_ptr,
|
|||||||
#ifdef PNG_WRITE_cHRM_SUPPORTED
|
#ifdef PNG_WRITE_cHRM_SUPPORTED
|
||||||
PNG_INTERNAL_FUNCTION(void,png_write_cHRM_fixed,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_write_cHRM_fixed,(png_structrp png_ptr,
|
||||||
const png_xy *xy), PNG_EMPTY);
|
const png_xy *xy), PNG_EMPTY);
|
||||||
/* The xy value must have been previously validated */
|
/* The xy value must have been previously validated */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_sRGB_SUPPORTED
|
#ifdef PNG_WRITE_sRGB_SUPPORTED
|
||||||
@ -1174,6 +1174,7 @@ PNG_INTERNAL_FUNCTION(void,png_do_write_interlace,(png_row_infop row_info,
|
|||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
|
||||||
|
|
||||||
|
#if PNG_ARM_NEON_OPT > 0
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
|
||||||
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
|
||||||
@ -1188,6 +1189,7 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,(png_row_infop
|
|||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
|
||||||
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Choose the best filter to use and filter the row data */
|
/* Choose the best filter to use and filter the row data */
|
||||||
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
|
||||||
@ -1413,7 +1415,7 @@ PNG_INTERNAL_FUNCTION(void,png_push_have_info,(png_structrp png_ptr,
|
|||||||
PNG_INTERNAL_FUNCTION(void,png_push_have_end,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_push_have_end,(png_structrp png_ptr,
|
||||||
png_inforp info_ptr),PNG_EMPTY);
|
png_inforp info_ptr),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_have_row,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_push_have_row,(png_structrp png_ptr,
|
||||||
png_bytep row),PNG_EMPTY);
|
png_bytep row),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_read_end,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_push_read_end,(png_structrp png_ptr,
|
||||||
png_inforp info_ptr),PNG_EMPTY);
|
png_inforp info_ptr),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_process_some_data,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_process_some_data,(png_structrp png_ptr,
|
||||||
@ -1452,13 +1454,13 @@ PNG_INTERNAL_FUNCTION(void,png_colorspace_set_gamma,(png_const_structrp png_ptr,
|
|||||||
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_colorspace_sync_info,(png_const_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_colorspace_sync_info,(png_const_structrp png_ptr,
|
||||||
png_inforp info_ptr), PNG_EMPTY);
|
png_inforp info_ptr), PNG_EMPTY);
|
||||||
/* Synchronize the info 'valid' flags with the colorspace */
|
/* Synchronize the info 'valid' flags with the colorspace */
|
||||||
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_colorspace_sync,(png_const_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_colorspace_sync,(png_const_structrp png_ptr,
|
||||||
png_inforp info_ptr), PNG_EMPTY);
|
png_inforp info_ptr), PNG_EMPTY);
|
||||||
/* Copy the png_struct colorspace to the info_struct and call the above to
|
/* Copy the png_struct colorspace to the info_struct and call the above to
|
||||||
* synchronize the flags. Checks for NULL info_ptr and does nothing.
|
* synchronize the flags. Checks for NULL info_ptr and does nothing.
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Added at libpng version 1.4.0 */
|
/* Added at libpng version 1.4.0 */
|
||||||
@ -1913,8 +1915,10 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
|
|||||||
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
||||||
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
||||||
*/
|
*/
|
||||||
|
# if PNG_ARM_NEON_OPT > 0
|
||||||
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
||||||
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
||||||
|
|||||||
250
pngread.c
250
pngread.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.23 [June 9, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -28,10 +28,10 @@ png_create_read_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
{
|
{
|
||||||
#ifndef PNG_USER_MEM_SUPPORTED
|
#ifndef PNG_USER_MEM_SUPPORTED
|
||||||
png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
|
png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
|
||||||
error_fn, warn_fn, NULL, NULL, NULL);
|
error_fn, warn_fn, NULL, NULL, NULL);
|
||||||
#else
|
#else
|
||||||
return png_create_read_struct_2(user_png_ver, error_ptr, error_fn,
|
return png_create_read_struct_2(user_png_ver, error_ptr, error_fn,
|
||||||
warn_fn, NULL, NULL, NULL);
|
warn_fn, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Alternate create PNG structure for reading, and allocate any memory
|
/* Alternate create PNG structure for reading, and allocate any memory
|
||||||
@ -43,7 +43,7 @@ png_create_read_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
|
png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
|
||||||
{
|
{
|
||||||
png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
|
png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
|
||||||
error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
|
error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
|
||||||
#endif /* USER_MEM */
|
#endif /* USER_MEM */
|
||||||
|
|
||||||
if (png_ptr != NULL)
|
if (png_ptr != NULL)
|
||||||
@ -252,7 +252,7 @@ png_read_info(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
|
|
||||||
else
|
else
|
||||||
png_handle_unknown(png_ptr, info_ptr, length,
|
png_handle_unknown(png_ptr, info_ptr, length,
|
||||||
PNG_HANDLE_CHUNK_AS_DEFAULT);
|
PNG_HANDLE_CHUNK_AS_DEFAULT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SEQUENTIAL_READ */
|
#endif /* SEQUENTIAL_READ */
|
||||||
@ -279,7 +279,7 @@ png_read_update_info(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
/* New in 1.6.0 this avoids the bug of doing the initializations twice */
|
/* New in 1.6.0 this avoids the bug of doing the initializations twice */
|
||||||
else
|
else
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"png_read_update_info/png_start_read_image: duplicate call");
|
"png_read_update_info/png_start_read_image: duplicate call");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,7 +302,7 @@ png_start_read_image(png_structrp png_ptr)
|
|||||||
/* New in 1.6.0 this avoids the bug of doing the initializations twice */
|
/* New in 1.6.0 this avoids the bug of doing the initializations twice */
|
||||||
else
|
else
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"png_start_read_image/png_read_update_info: duplicate call");
|
"png_start_read_image/png_read_update_info: duplicate call");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SEQUENTIAL_READ */
|
#endif /* SEQUENTIAL_READ */
|
||||||
@ -540,7 +540,7 @@ png_read_row(png_structrp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
{
|
{
|
||||||
if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST)
|
if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST)
|
||||||
png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1,
|
png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1,
|
||||||
png_ptr->prev_row + 1, png_ptr->row_buf[0]);
|
png_ptr->prev_row + 1, png_ptr->row_buf[0]);
|
||||||
else
|
else
|
||||||
png_error(png_ptr, "bad adaptive filter value");
|
png_error(png_ptr, "bad adaptive filter value");
|
||||||
}
|
}
|
||||||
@ -584,7 +584,7 @@ png_read_row(png_structrp png_ptr, png_bytep row, png_bytep dsp_row)
|
|||||||
{
|
{
|
||||||
if (png_ptr->pass < 6)
|
if (png_ptr->pass < 6)
|
||||||
png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
|
png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
|
||||||
png_ptr->transformations);
|
png_ptr->transformations);
|
||||||
|
|
||||||
if (dsp_row != NULL)
|
if (dsp_row != NULL)
|
||||||
png_combine_row(png_ptr, dsp_row, 1/*display*/);
|
png_combine_row(png_ptr, dsp_row, 1/*display*/);
|
||||||
@ -719,7 +719,7 @@ png_read_image(png_structrp png_ptr, png_bytepp image)
|
|||||||
* but the caller should do it!
|
* but the caller should do it!
|
||||||
*/
|
*/
|
||||||
png_warning(png_ptr, "Interlace handling should be turned on when "
|
png_warning(png_ptr, "Interlace handling should be turned on when "
|
||||||
"using png_read_image");
|
"using png_read_image");
|
||||||
/* Make sure this is set correctly */
|
/* Make sure this is set correctly */
|
||||||
png_ptr->num_rows = png_ptr->height;
|
png_ptr->num_rows = png_ptr->height;
|
||||||
}
|
}
|
||||||
@ -779,8 +779,8 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||||
/* Report invalid palette index; added at libng-1.5.10 */
|
/* Report invalid palette index; added at libng-1.5.10 */
|
||||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
|
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
|
||||||
png_ptr->num_palette_max > png_ptr->num_palette)
|
png_ptr->num_palette_max > png_ptr->num_palette)
|
||||||
png_benign_error(png_ptr, "Read palette index exceeding num_palette");
|
png_benign_error(png_ptr, "Read palette index exceeding num_palette");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
do
|
do
|
||||||
@ -919,7 +919,7 @@ png_read_end(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
|
|
||||||
else
|
else
|
||||||
png_handle_unknown(png_ptr, info_ptr, length,
|
png_handle_unknown(png_ptr, info_ptr, length,
|
||||||
PNG_HANDLE_CHUNK_AS_DEFAULT);
|
PNG_HANDLE_CHUNK_AS_DEFAULT);
|
||||||
} while ((png_ptr->mode & PNG_HAVE_IEND) == 0);
|
} while ((png_ptr->mode & PNG_HAVE_IEND) == 0);
|
||||||
}
|
}
|
||||||
#endif /* SEQUENTIAL_READ */
|
#endif /* SEQUENTIAL_READ */
|
||||||
@ -1030,8 +1030,7 @@ png_set_read_status_fn(png_structrp png_ptr, png_read_status_ptr read_row_fn)
|
|||||||
#ifdef PNG_INFO_IMAGE_SUPPORTED
|
#ifdef PNG_INFO_IMAGE_SUPPORTED
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_read_png(png_structrp png_ptr, png_inforp info_ptr,
|
png_read_png(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
int transforms,
|
int transforms, voidp params)
|
||||||
voidp params)
|
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
@ -1307,7 +1306,7 @@ png_image_read_init(png_imagep image)
|
|||||||
if (info_ptr != NULL)
|
if (info_ptr != NULL)
|
||||||
{
|
{
|
||||||
png_controlp control = png_voidcast(png_controlp,
|
png_controlp control = png_voidcast(png_controlp,
|
||||||
png_malloc_warn(png_ptr, (sizeof *control)));
|
png_malloc_warn(png_ptr, (sizeof *control)));
|
||||||
|
|
||||||
if (control != NULL)
|
if (control != NULL)
|
||||||
{
|
{
|
||||||
@ -1470,12 +1469,12 @@ png_image_begin_read_from_stdio(png_imagep image, FILE* file)
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_begin_read_from_stdio: invalid argument");
|
"png_image_begin_read_from_stdio: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_begin_read_from_stdio: incorrect PNG_IMAGE_VERSION");
|
"png_image_begin_read_from_stdio: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1508,12 +1507,12 @@ png_image_begin_read_from_file(png_imagep image, const char *file_name)
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_begin_read_from_file: invalid argument");
|
"png_image_begin_read_from_file: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_begin_read_from_file: incorrect PNG_IMAGE_VERSION");
|
"png_image_begin_read_from_file: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1550,7 +1549,7 @@ png_image_memory_read(png_structp png_ptr, png_bytep out, png_size_t need)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int PNGAPI png_image_begin_read_from_memory(png_imagep image,
|
int PNGAPI png_image_begin_read_from_memory(png_imagep image,
|
||||||
png_const_voidp memory, png_size_t size)
|
png_const_voidp memory, png_size_t size)
|
||||||
{
|
{
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
{
|
||||||
@ -1573,12 +1572,12 @@ int PNGAPI png_image_begin_read_from_memory(png_imagep image,
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_begin_read_from_memory: invalid argument");
|
"png_image_begin_read_from_memory: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_begin_read_from_memory: incorrect PNG_IMAGE_VERSION");
|
"png_image_begin_read_from_memory: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1624,12 +1623,12 @@ png_image_skip_unused_chunks(png_structrp png_ptr)
|
|||||||
* IHDR, PLTE, tRNS, IDAT, and IEND chunks.
|
* IHDR, PLTE, tRNS, IDAT, and IEND chunks.
|
||||||
*/
|
*/
|
||||||
png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_NEVER,
|
png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_NEVER,
|
||||||
NULL, -1);
|
NULL, -1);
|
||||||
|
|
||||||
/* But do not ignore image data handling chunks */
|
/* But do not ignore image data handling chunks */
|
||||||
png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_AS_DEFAULT,
|
png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_AS_DEFAULT,
|
||||||
chunks_to_process, (int)/*SAFE*/(sizeof chunks_to_process)/5);
|
chunks_to_process, (int)/*SAFE*/(sizeof chunks_to_process)/5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# define PNG_SKIP_CHUNKS(p) png_image_skip_unused_chunks(p)
|
# define PNG_SKIP_CHUNKS(p) png_image_skip_unused_chunks(p)
|
||||||
@ -1696,7 +1695,7 @@ decode_gamma(png_image_read_control *display, png_uint_32 value, int encoding)
|
|||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
default:
|
default:
|
||||||
png_error(display->image->opaque->png_ptr,
|
png_error(display->image->opaque->png_ptr,
|
||||||
"unexpected encoding (internal error)");
|
"unexpected encoding (internal error)");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1705,8 +1704,8 @@ decode_gamma(png_image_read_control *display, png_uint_32 value, int encoding)
|
|||||||
|
|
||||||
static png_uint_32
|
static png_uint_32
|
||||||
png_colormap_compose(png_image_read_control *display,
|
png_colormap_compose(png_image_read_control *display,
|
||||||
png_uint_32 foreground, int foreground_encoding, png_uint_32 alpha,
|
png_uint_32 foreground, int foreground_encoding, png_uint_32 alpha,
|
||||||
png_uint_32 background, int encoding)
|
png_uint_32 background, int encoding)
|
||||||
{
|
{
|
||||||
/* The file value is composed on the background, the background has the given
|
/* The file value is composed on the background, the background has the given
|
||||||
* encoding and so does the result, the file is encoded with P_FILE and the
|
* encoding and so does the result, the file is encoded with P_FILE and the
|
||||||
@ -1742,14 +1741,14 @@ png_colormap_compose(png_image_read_control *display,
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
png_create_colormap_entry(png_image_read_control *display,
|
png_create_colormap_entry(png_image_read_control *display,
|
||||||
png_uint_32 ip, png_uint_32 red, png_uint_32 green, png_uint_32 blue,
|
png_uint_32 ip, png_uint_32 red, png_uint_32 green, png_uint_32 blue,
|
||||||
png_uint_32 alpha, int encoding)
|
png_uint_32 alpha, int encoding)
|
||||||
{
|
{
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
const int output_encoding = (image->format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
|
const int output_encoding = (image->format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
|
||||||
P_LINEAR : P_sRGB;
|
P_LINEAR : P_sRGB;
|
||||||
const int convert_to_Y = (image->format & PNG_FORMAT_FLAG_COLOR) == 0 &&
|
const int convert_to_Y = (image->format & PNG_FORMAT_FLAG_COLOR) == 0 &&
|
||||||
(red != green || green != blue);
|
(red != green || green != blue);
|
||||||
|
|
||||||
if (ip > 255)
|
if (ip > 255)
|
||||||
png_error(image->opaque->png_ptr, "color-map index out of range");
|
png_error(image->opaque->png_ptr, "color-map index out of range");
|
||||||
@ -2029,7 +2028,7 @@ make_ga_colormap(png_image_read_control *display)
|
|||||||
|
|
||||||
for (g=0; g<6; ++g)
|
for (g=0; g<6; ++g)
|
||||||
png_create_colormap_entry(display, i++, g*51, g*51, g*51, a*51,
|
png_create_colormap_entry(display, i++, g*51, g*51, g*51, a*51,
|
||||||
P_sRGB);
|
P_sRGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
@ -2053,7 +2052,7 @@ make_rgb_colormap(png_image_read_control *display)
|
|||||||
|
|
||||||
for (b=0; b<6; ++b)
|
for (b=0; b<6; ++b)
|
||||||
png_create_colormap_entry(display, i++, r*51, g*51, b*51, 255,
|
png_create_colormap_entry(display, i++, r*51, g*51, b*51, 255,
|
||||||
P_sRGB);
|
P_sRGB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2105,7 +2104,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
|
|
||||||
else if (display->background == NULL /* no way to remove it */)
|
else if (display->background == NULL /* no way to remove it */)
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"a background color must be supplied to remove alpha/transparency");
|
"background color must be supplied to remove alpha/transparency");
|
||||||
|
|
||||||
/* Get a copy of the background color (this avoids repeating the checks
|
/* Get a copy of the background color (this avoids repeating the checks
|
||||||
* below.) The encoding is 8-bit sRGB or 16-bit linear, depending on the
|
* below.) The encoding is 8-bit sRGB or 16-bit linear, depending on the
|
||||||
@ -2200,7 +2199,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
*/
|
*/
|
||||||
if (i != trans)
|
if (i != trans)
|
||||||
png_create_colormap_entry(display, i, val, val, val, 255,
|
png_create_colormap_entry(display, i, val, val, val, 255,
|
||||||
P_FILE/*8-bit with file gamma*/);
|
P_FILE/*8-bit with file gamma*/);
|
||||||
|
|
||||||
/* Else this entry is transparent. The colors don't matter if
|
/* Else this entry is transparent. The colors don't matter if
|
||||||
* there is an alpha channel (back_alpha == 0), but it does no
|
* there is an alpha channel (back_alpha == 0), but it does no
|
||||||
@ -2212,7 +2211,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
*/
|
*/
|
||||||
else
|
else
|
||||||
png_create_colormap_entry(display, i, back_r, back_g, back_b,
|
png_create_colormap_entry(display, i, back_r, back_g, back_b,
|
||||||
back_alpha, output_encoding);
|
back_alpha, output_encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We need libpng to preserve the original encoding. */
|
/* We need libpng to preserve the original encoding. */
|
||||||
@ -2277,7 +2276,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* matches.
|
* matches.
|
||||||
*/
|
*/
|
||||||
png_create_colormap_entry(display, gray, back_g, back_g,
|
png_create_colormap_entry(display, gray, back_g, back_g,
|
||||||
back_g, 65535, P_LINEAR);
|
back_g, 65535, P_LINEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The background passed to libpng, however, must be the
|
/* The background passed to libpng, however, must be the
|
||||||
@ -2291,8 +2290,8 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* doesn't.
|
* doesn't.
|
||||||
*/
|
*/
|
||||||
png_set_background_fixed(png_ptr, &c,
|
png_set_background_fixed(png_ptr, &c,
|
||||||
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
||||||
0/*gamma: not used*/);
|
0/*gamma: not used*/);
|
||||||
|
|
||||||
output_processing = PNG_CMAP_NONE;
|
output_processing = PNG_CMAP_NONE;
|
||||||
break;
|
break;
|
||||||
@ -2322,7 +2321,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* background color at full precision.
|
* background color at full precision.
|
||||||
*/
|
*/
|
||||||
png_create_colormap_entry(display, 254, back_r, back_g, back_b,
|
png_create_colormap_entry(display, 254, back_r, back_g, back_b,
|
||||||
back_alpha, output_encoding);
|
back_alpha, output_encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -2390,7 +2389,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
|
|
||||||
/* And make sure the corresponding palette entry matches. */
|
/* And make sure the corresponding palette entry matches. */
|
||||||
png_create_colormap_entry(display, gray, back_g, back_g,
|
png_create_colormap_entry(display, gray, back_g, back_g,
|
||||||
back_g, 65535, P_LINEAR);
|
back_g, 65535, P_LINEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The background passed to libpng, however, must be the sRGB
|
/* The background passed to libpng, however, must be the sRGB
|
||||||
@ -2400,8 +2399,8 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
|
c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
|
||||||
|
|
||||||
png_set_background_fixed(png_ptr, &c,
|
png_set_background_fixed(png_ptr, &c,
|
||||||
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
||||||
0/*gamma: not used*/);
|
0/*gamma: not used*/);
|
||||||
|
|
||||||
output_processing = PNG_CMAP_NONE;
|
output_processing = PNG_CMAP_NONE;
|
||||||
}
|
}
|
||||||
@ -2421,7 +2420,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
{
|
{
|
||||||
png_uint_32 gray = (i * 256 + 115) / 231;
|
png_uint_32 gray = (i * 256 + 115) / 231;
|
||||||
png_create_colormap_entry(display, i++, gray, gray, gray,
|
png_create_colormap_entry(display, i++, gray, gray, gray,
|
||||||
255, P_sRGB);
|
255, P_sRGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: this preserves the full precision of the application
|
/* NOTE: this preserves the full precision of the application
|
||||||
@ -2430,13 +2429,13 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
background_index = i;
|
background_index = i;
|
||||||
png_create_colormap_entry(display, i++, back_r, back_g, back_b,
|
png_create_colormap_entry(display, i++, back_r, back_g, back_b,
|
||||||
#ifdef __COVERITY__
|
#ifdef __COVERITY__
|
||||||
/* Coverity claims that output_encoding cannot be 2 (P_LINEAR)
|
/* Coverity claims that output_encoding
|
||||||
* here.
|
* cannot be 2 (P_LINEAR) here.
|
||||||
*/ 255U,
|
*/ 255U,
|
||||||
#else
|
#else
|
||||||
output_encoding == P_LINEAR ? 65535U : 255U,
|
output_encoding == P_LINEAR ? 65535U : 255U,
|
||||||
#endif
|
#endif
|
||||||
output_encoding);
|
output_encoding);
|
||||||
|
|
||||||
/* For non-opaque input composite on the sRGB background - this
|
/* For non-opaque input composite on the sRGB background - this
|
||||||
* requires inverting the encoding for each component. The input
|
* requires inverting the encoding for each component. The input
|
||||||
@ -2474,9 +2473,9 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
png_uint_32 gray = png_sRGB_table[g*51] * alpha;
|
png_uint_32 gray = png_sRGB_table[g*51] * alpha;
|
||||||
|
|
||||||
png_create_colormap_entry(display, i++,
|
png_create_colormap_entry(display, i++,
|
||||||
PNG_sRGB_FROM_LINEAR(gray + back_rx),
|
PNG_sRGB_FROM_LINEAR(gray + back_rx),
|
||||||
PNG_sRGB_FROM_LINEAR(gray + back_gx),
|
PNG_sRGB_FROM_LINEAR(gray + back_gx),
|
||||||
PNG_sRGB_FROM_LINEAR(gray + back_bx), 255, P_sRGB);
|
PNG_sRGB_FROM_LINEAR(gray + back_bx), 255, P_sRGB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2502,7 +2501,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* png_set_tRNS_to_alpha before png_set_background_fixed.
|
* png_set_tRNS_to_alpha before png_set_background_fixed.
|
||||||
*/
|
*/
|
||||||
png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE, -1,
|
png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE, -1,
|
||||||
-1);
|
-1);
|
||||||
data_encoding = P_sRGB;
|
data_encoding = P_sRGB;
|
||||||
|
|
||||||
/* The output will now be one or two 8-bit gray or gray+alpha
|
/* The output will now be one or two 8-bit gray or gray+alpha
|
||||||
@ -2578,13 +2577,13 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
gray = png_sRGB_table[gray]; /* now P_LINEAR */
|
gray = png_sRGB_table[gray]; /* now P_LINEAR */
|
||||||
|
|
||||||
gray = PNG_DIV257(png_gamma_16bit_correct(gray,
|
gray = PNG_DIV257(png_gamma_16bit_correct(gray,
|
||||||
png_ptr->colorspace.gamma)); /* now P_FILE */
|
png_ptr->colorspace.gamma)); /* now P_FILE */
|
||||||
|
|
||||||
/* And make sure the corresponding palette entry contains
|
/* And make sure the corresponding palette entry contains
|
||||||
* exactly the required sRGB value.
|
* exactly the required sRGB value.
|
||||||
*/
|
*/
|
||||||
png_create_colormap_entry(display, gray, back_g, back_g,
|
png_create_colormap_entry(display, gray, back_g, back_g,
|
||||||
back_g, 0/*unused*/, output_encoding);
|
back_g, 0/*unused*/, output_encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (output_encoding == P_LINEAR)
|
else if (output_encoding == P_LINEAR)
|
||||||
@ -2609,8 +2608,8 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
*/
|
*/
|
||||||
expand_tRNS = 1;
|
expand_tRNS = 1;
|
||||||
png_set_background_fixed(png_ptr, &c,
|
png_set_background_fixed(png_ptr, &c,
|
||||||
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
||||||
0/*gamma: not used*/);
|
0/*gamma: not used*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
output_processing = PNG_CMAP_NONE;
|
output_processing = PNG_CMAP_NONE;
|
||||||
@ -2644,7 +2643,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
|
|
||||||
/* Add a transparent entry. */
|
/* Add a transparent entry. */
|
||||||
png_create_colormap_entry(display, cmap_entries, 255, 255,
|
png_create_colormap_entry(display, cmap_entries, 255, 255,
|
||||||
255, 0, P_sRGB);
|
255, 0, P_sRGB);
|
||||||
|
|
||||||
/* This is stored as the background index for the processing
|
/* This is stored as the background index for the processing
|
||||||
* algorithm.
|
* algorithm.
|
||||||
@ -2665,7 +2664,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
*/
|
*/
|
||||||
for (b=0; b<256; b = (b << 1) | 0x7f)
|
for (b=0; b<256; b = (b << 1) | 0x7f)
|
||||||
png_create_colormap_entry(display, cmap_entries++,
|
png_create_colormap_entry(display, cmap_entries++,
|
||||||
r, g, b, 128, P_sRGB);
|
r, g, b, 128, P_sRGB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2692,7 +2691,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
cmap_entries = make_rgb_colormap(display);
|
cmap_entries = make_rgb_colormap(display);
|
||||||
|
|
||||||
png_create_colormap_entry(display, cmap_entries, back_r,
|
png_create_colormap_entry(display, cmap_entries, back_r,
|
||||||
back_g, back_b, 0/*unused*/, output_encoding);
|
back_g, back_b, 0/*unused*/, output_encoding);
|
||||||
|
|
||||||
if (output_encoding == P_LINEAR)
|
if (output_encoding == P_LINEAR)
|
||||||
{
|
{
|
||||||
@ -2714,9 +2713,9 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* index.
|
* index.
|
||||||
*/
|
*/
|
||||||
if (memcmp((png_const_bytep)display->colormap +
|
if (memcmp((png_const_bytep)display->colormap +
|
||||||
sample_size * cmap_entries,
|
sample_size * cmap_entries,
|
||||||
(png_const_bytep)display->colormap +
|
(png_const_bytep)display->colormap +
|
||||||
sample_size * PNG_RGB_INDEX(r,g,b),
|
sample_size * PNG_RGB_INDEX(r,g,b),
|
||||||
sample_size) != 0)
|
sample_size) != 0)
|
||||||
{
|
{
|
||||||
/* The background color must be added. */
|
/* The background color must be added. */
|
||||||
@ -2734,13 +2733,13 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
*/
|
*/
|
||||||
for (b=0; b<256; b = (b << 1) | 0x7f)
|
for (b=0; b<256; b = (b << 1) | 0x7f)
|
||||||
png_create_colormap_entry(display, cmap_entries++,
|
png_create_colormap_entry(display, cmap_entries++,
|
||||||
png_colormap_compose(display, r, P_sRGB, 128,
|
png_colormap_compose(display, r, P_sRGB, 128,
|
||||||
back_r, output_encoding),
|
back_r, output_encoding),
|
||||||
png_colormap_compose(display, g, P_sRGB, 128,
|
png_colormap_compose(display, g, P_sRGB, 128,
|
||||||
back_g, output_encoding),
|
back_g, output_encoding),
|
||||||
png_colormap_compose(display, b, P_sRGB, 128,
|
png_colormap_compose(display, b, P_sRGB, 128,
|
||||||
back_b, output_encoding),
|
back_b, output_encoding),
|
||||||
0/*unused*/, output_encoding);
|
0/*unused*/, output_encoding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2758,8 +2757,8 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
c.blue = (png_uint_16)back_b;
|
c.blue = (png_uint_16)back_b;
|
||||||
|
|
||||||
png_set_background_fixed(png_ptr, &c,
|
png_set_background_fixed(png_ptr, &c,
|
||||||
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
||||||
0/*gamma: not used*/);
|
0/*gamma: not used*/);
|
||||||
|
|
||||||
output_processing = PNG_CMAP_RGB;
|
output_processing = PNG_CMAP_RGB;
|
||||||
}
|
}
|
||||||
@ -2811,7 +2810,7 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
{
|
{
|
||||||
if (trans[i] == 0)
|
if (trans[i] == 0)
|
||||||
png_create_colormap_entry(display, i, back_r, back_g,
|
png_create_colormap_entry(display, i, back_r, back_g,
|
||||||
back_b, 0, output_encoding);
|
back_b, 0, output_encoding);
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2819,22 +2818,22 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
* on the sRGB color in 'back'.
|
* on the sRGB color in 'back'.
|
||||||
*/
|
*/
|
||||||
png_create_colormap_entry(display, i,
|
png_create_colormap_entry(display, i,
|
||||||
png_colormap_compose(display, colormap[i].red, P_FILE,
|
png_colormap_compose(display, colormap[i].red,
|
||||||
trans[i], back_r, output_encoding),
|
P_FILE, trans[i], back_r, output_encoding),
|
||||||
png_colormap_compose(display, colormap[i].green, P_FILE,
|
png_colormap_compose(display, colormap[i].green,
|
||||||
trans[i], back_g, output_encoding),
|
P_FILE, trans[i], back_g, output_encoding),
|
||||||
png_colormap_compose(display, colormap[i].blue, P_FILE,
|
png_colormap_compose(display, colormap[i].blue,
|
||||||
trans[i], back_b, output_encoding),
|
P_FILE, trans[i], back_b, output_encoding),
|
||||||
output_encoding == P_LINEAR ? trans[i] * 257U :
|
output_encoding == P_LINEAR ? trans[i] * 257U :
|
||||||
trans[i],
|
trans[i],
|
||||||
output_encoding);
|
output_encoding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
png_create_colormap_entry(display, i, colormap[i].red,
|
png_create_colormap_entry(display, i, colormap[i].red,
|
||||||
colormap[i].green, colormap[i].blue,
|
colormap[i].green, colormap[i].blue,
|
||||||
i < num_trans ? trans[i] : 255U, P_FILE/*8-bit*/);
|
i < num_trans ? trans[i] : 255U, P_FILE/*8-bit*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The PNG data may have indices packed in fewer than 8 bits, it
|
/* The PNG data may have indices packed in fewer than 8 bits, it
|
||||||
@ -2924,7 +2923,7 @@ static int
|
|||||||
png_image_read_and_map(png_voidp argument)
|
png_image_read_and_map(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
||||||
argument);
|
argument);
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
png_structrp png_ptr = image->opaque->png_ptr;
|
png_structrp png_ptr = image->opaque->png_ptr;
|
||||||
int passes;
|
int passes;
|
||||||
@ -3061,7 +3060,7 @@ png_image_read_and_map(png_voidp argument)
|
|||||||
|
|
||||||
if (alpha >= 196)
|
if (alpha >= 196)
|
||||||
*outrow = PNG_RGB_INDEX(inrow[0], inrow[1],
|
*outrow = PNG_RGB_INDEX(inrow[0], inrow[1],
|
||||||
inrow[2]);
|
inrow[2]);
|
||||||
|
|
||||||
else if (alpha < 64)
|
else if (alpha < 64)
|
||||||
*outrow = PNG_CMAP_RGB_ALPHA_BACKGROUND;
|
*outrow = PNG_CMAP_RGB_ALPHA_BACKGROUND;
|
||||||
@ -3113,7 +3112,7 @@ static int
|
|||||||
png_image_read_colormapped(png_voidp argument)
|
png_image_read_colormapped(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
||||||
argument);
|
argument);
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
png_controlp control = image->opaque;
|
png_controlp control = image->opaque;
|
||||||
png_structrp png_ptr = control->png_ptr;
|
png_structrp png_ptr = control->png_ptr;
|
||||||
@ -3246,7 +3245,7 @@ static int
|
|||||||
png_image_read_composite(png_voidp argument)
|
png_image_read_composite(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
||||||
argument);
|
argument);
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
png_structrp png_ptr = image->opaque->png_ptr;
|
png_structrp png_ptr = image->opaque->png_ptr;
|
||||||
int passes;
|
int passes;
|
||||||
@ -3373,7 +3372,7 @@ static int
|
|||||||
png_image_read_background(png_voidp argument)
|
png_image_read_background(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
||||||
argument);
|
argument);
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
png_structrp png_ptr = image->opaque->png_ptr;
|
png_structrp png_ptr = image->opaque->png_ptr;
|
||||||
png_inforp info_ptr = image->opaque->info_ptr;
|
png_inforp info_ptr = image->opaque->info_ptr;
|
||||||
@ -3433,8 +3432,7 @@ png_image_read_background(png_voidp argument)
|
|||||||
|
|
||||||
for (pass = 0; pass < passes; ++pass)
|
for (pass = 0; pass < passes; ++pass)
|
||||||
{
|
{
|
||||||
png_bytep row = png_voidcast(png_bytep,
|
png_bytep row = png_voidcast(png_bytep, display->first_row);
|
||||||
display->first_row);
|
|
||||||
unsigned int startx, stepx, stepy;
|
unsigned int startx, stepx, stepy;
|
||||||
png_uint_32 y;
|
png_uint_32 y;
|
||||||
|
|
||||||
@ -3462,7 +3460,7 @@ png_image_read_background(png_voidp argument)
|
|||||||
for (; y<height; y += stepy)
|
for (; y<height; y += stepy)
|
||||||
{
|
{
|
||||||
png_bytep inrow = png_voidcast(png_bytep,
|
png_bytep inrow = png_voidcast(png_bytep,
|
||||||
display->local_row);
|
display->local_row);
|
||||||
png_bytep outrow = first_row + y * step_row;
|
png_bytep outrow = first_row + y * step_row;
|
||||||
png_const_bytep end_row = outrow + width;
|
png_const_bytep end_row = outrow + width;
|
||||||
|
|
||||||
@ -3507,7 +3505,7 @@ png_image_read_background(png_voidp argument)
|
|||||||
for (; y<height; y += stepy)
|
for (; y<height; y += stepy)
|
||||||
{
|
{
|
||||||
png_bytep inrow = png_voidcast(png_bytep,
|
png_bytep inrow = png_voidcast(png_bytep,
|
||||||
display->local_row);
|
display->local_row);
|
||||||
png_bytep outrow = first_row + y * step_row;
|
png_bytep outrow = first_row + y * step_row;
|
||||||
png_const_bytep end_row = outrow + width;
|
png_const_bytep end_row = outrow + width;
|
||||||
|
|
||||||
@ -3554,7 +3552,7 @@ png_image_read_background(png_voidp argument)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
png_uint_16p first_row = png_voidcast(png_uint_16p,
|
png_uint_16p first_row = png_voidcast(png_uint_16p,
|
||||||
display->first_row);
|
display->first_row);
|
||||||
/* The division by two is safe because the caller passed in a
|
/* The division by two is safe because the caller passed in a
|
||||||
* stride which was multiplied by 2 (below) to get row_bytes.
|
* stride which was multiplied by 2 (below) to get row_bytes.
|
||||||
*/
|
*/
|
||||||
@ -3604,7 +3602,7 @@ png_image_read_background(png_voidp argument)
|
|||||||
|
|
||||||
/* Read the row, which is packed: */
|
/* Read the row, which is packed: */
|
||||||
png_read_row(png_ptr, png_voidcast(png_bytep,
|
png_read_row(png_ptr, png_voidcast(png_bytep,
|
||||||
display->local_row), NULL);
|
display->local_row), NULL);
|
||||||
inrow = png_voidcast(png_const_uint_16p, display->local_row);
|
inrow = png_voidcast(png_const_uint_16p, display->local_row);
|
||||||
|
|
||||||
/* Now do the pre-multiplication on each pixel in this row.
|
/* Now do the pre-multiplication on each pixel in this row.
|
||||||
@ -3653,7 +3651,7 @@ static int
|
|||||||
png_image_read_direct(png_voidp argument)
|
png_image_read_direct(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
png_image_read_control *display = png_voidcast(png_image_read_control*,
|
||||||
argument);
|
argument);
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
png_structrp png_ptr = image->opaque->png_ptr;
|
png_structrp png_ptr = image->opaque->png_ptr;
|
||||||
png_inforp info_ptr = image->opaque->info_ptr;
|
png_inforp info_ptr = image->opaque->info_ptr;
|
||||||
@ -3704,7 +3702,7 @@ png_image_read_direct(png_voidp argument)
|
|||||||
do_local_background = 1/*maybe*/;
|
do_local_background = 1/*maybe*/;
|
||||||
|
|
||||||
png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE,
|
png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE,
|
||||||
PNG_RGB_TO_GRAY_DEFAULT, PNG_RGB_TO_GRAY_DEFAULT);
|
PNG_RGB_TO_GRAY_DEFAULT, PNG_RGB_TO_GRAY_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
change &= ~PNG_FORMAT_FLAG_COLOR;
|
change &= ~PNG_FORMAT_FLAG_COLOR;
|
||||||
@ -3763,7 +3761,7 @@ png_image_read_direct(png_voidp argument)
|
|||||||
* final value.
|
* final value.
|
||||||
*/
|
*/
|
||||||
if (png_muldiv(>est, output_gamma, png_ptr->colorspace.gamma,
|
if (png_muldiv(>est, output_gamma, png_ptr->colorspace.gamma,
|
||||||
PNG_FP_1) != 0 && png_gamma_significant(gtest) == 0)
|
PNG_FP_1) != 0 && png_gamma_significant(gtest) == 0)
|
||||||
do_local_background = 0;
|
do_local_background = 0;
|
||||||
|
|
||||||
else if (mode == PNG_ALPHA_STANDARD)
|
else if (mode == PNG_ALPHA_STANDARD)
|
||||||
@ -3826,8 +3824,8 @@ png_image_read_direct(png_voidp argument)
|
|||||||
* pixels.
|
* pixels.
|
||||||
*/
|
*/
|
||||||
png_set_background_fixed(png_ptr, &c,
|
png_set_background_fixed(png_ptr, &c,
|
||||||
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
|
||||||
0/*gamma: not used*/);
|
0/*gamma: not used*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* compose on row: implemented below. */
|
else /* compose on row: implemented below. */
|
||||||
@ -4077,7 +4075,7 @@ png_image_read_direct(png_voidp argument)
|
|||||||
|
|
||||||
int PNGAPI
|
int PNGAPI
|
||||||
png_image_finish_read(png_imagep image, png_const_colorp background,
|
png_image_finish_read(png_imagep image, png_const_colorp background,
|
||||||
void *buffer, png_int_32 row_stride, void *colormap)
|
void *buffer, png_int_32 row_stride, void *colormap)
|
||||||
{
|
{
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
{
|
{
|
||||||
@ -4087,6 +4085,12 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
*/
|
*/
|
||||||
const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
|
const unsigned int channels = PNG_IMAGE_PIXEL_CHANNELS(image->format);
|
||||||
|
|
||||||
|
/* The following checks just the 'row_stride' calculation to ensure it
|
||||||
|
* fits in a signed 32-bit value. Because channels/components can be
|
||||||
|
* either 1 or 2 bytes in size the length of a row can still overflow 32
|
||||||
|
* bits; this is just to verify that the 'row_stride' argument can be
|
||||||
|
* represented.
|
||||||
|
*/
|
||||||
if (image->width <= 0x7FFFFFFFU/channels) /* no overflow */
|
if (image->width <= 0x7FFFFFFFU/channels) /* no overflow */
|
||||||
{
|
{
|
||||||
png_uint_32 check;
|
png_uint_32 check;
|
||||||
@ -4101,13 +4105,30 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
else
|
else
|
||||||
check = row_stride;
|
check = row_stride;
|
||||||
|
|
||||||
|
/* This verifies 'check', the absolute value of the actual stride
|
||||||
|
* passed in and detects overflow in the application calculation (i.e.
|
||||||
|
* if the app did actually pass in a non-zero 'row_stride'.
|
||||||
|
*/
|
||||||
if (image->opaque != NULL && buffer != NULL && check >= png_row_stride)
|
if (image->opaque != NULL && buffer != NULL && check >= png_row_stride)
|
||||||
{
|
{
|
||||||
/* Now check for overflow of the image buffer calculation; this
|
/* Now check for overflow of the image buffer calculation; this
|
||||||
* limits the whole image size to 32 bits for API compatibility with
|
* limits the whole image size to 32 bits for API compatibility with
|
||||||
* the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
|
* the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
|
||||||
|
*
|
||||||
|
* The PNG_IMAGE_BUFFER_SIZE macro is:
|
||||||
|
*
|
||||||
|
* (PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)*height*(row_stride))
|
||||||
|
*
|
||||||
|
* And the component size is always 1 or 2, so make sure that the
|
||||||
|
* number of *bytes* that the application is saying are available
|
||||||
|
* does actually fit into a 32-bit number.
|
||||||
|
*
|
||||||
|
* NOTE: this will be changed in 1.7 because PNG_IMAGE_BUFFER_SIZE
|
||||||
|
* will be changed to use png_alloc_size_t; bigger images can be
|
||||||
|
* accomodated on 64-bit systems.
|
||||||
*/
|
*/
|
||||||
if (image->height <= 0xFFFFFFFF/png_row_stride)
|
if (image->height <=
|
||||||
|
0xFFFFFFFFU/PNG_IMAGE_PIXEL_COMPONENT_SIZE(image->format)/check)
|
||||||
{
|
{
|
||||||
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
|
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
|
||||||
(image->colormap_entries > 0 && colormap != NULL))
|
(image->colormap_entries > 0 && colormap != NULL))
|
||||||
@ -4127,15 +4148,16 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
* all the setup has already been done.
|
* all the setup has already been done.
|
||||||
*/
|
*/
|
||||||
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
|
||||||
result = png_safe_execute(image,
|
result =
|
||||||
png_image_read_colormap, &display) &&
|
png_safe_execute(image,
|
||||||
png_safe_execute(image,
|
png_image_read_colormap, &display) &&
|
||||||
png_image_read_colormapped, &display);
|
png_safe_execute(image,
|
||||||
|
png_image_read_colormapped, &display);
|
||||||
|
|
||||||
else
|
else
|
||||||
result =
|
result =
|
||||||
png_safe_execute(image,
|
png_safe_execute(image,
|
||||||
png_image_read_direct, &display);
|
png_image_read_direct, &display);
|
||||||
|
|
||||||
png_image_free(image);
|
png_image_free(image);
|
||||||
return result;
|
return result;
|
||||||
@ -4143,27 +4165,27 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read[color-map]: no color-map");
|
"png_image_finish_read[color-map]: no color-map");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: image too large");
|
"png_image_finish_read: image too large");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: invalid argument");
|
"png_image_finish_read: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: row_stride too large");
|
"png_image_finish_read: row_stride too large");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_finish_read: damaged PNG_IMAGE_VERSION");
|
"png_image_finish_read: damaged PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
6
pngrio.c
6
pngrio.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrio.c - functions for data input
|
/* pngrio.c - functions for data input
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -85,7 +85,7 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
|||||||
*/
|
*/
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_read_fn(png_structrp png_ptr, png_voidp io_ptr,
|
png_set_read_fn(png_structrp png_ptr, png_voidp io_ptr,
|
||||||
png_rw_ptr read_data_fn)
|
png_rw_ptr read_data_fn)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|||||||
50
pngrtran.c
50
pngrtran.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [May 26, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -48,7 +48,7 @@ png_set_crc_action(png_structrp png_ptr, int crit_action, int ancil_action)
|
|||||||
|
|
||||||
case PNG_CRC_WARN_DISCARD: /* Not a valid action for critical data */
|
case PNG_CRC_WARN_DISCARD: /* Not a valid action for critical data */
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Can't discard critical data on CRC error");
|
"Can't discard critical data on CRC error");
|
||||||
case PNG_CRC_ERROR_QUIT: /* Error/quit */
|
case PNG_CRC_ERROR_QUIT: /* Error/quit */
|
||||||
|
|
||||||
case PNG_CRC_DEFAULT:
|
case PNG_CRC_DEFAULT:
|
||||||
@ -101,7 +101,7 @@ png_rtran_ok(png_structrp png_ptr, int need_IHDR)
|
|||||||
{
|
{
|
||||||
if ((png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
|
if ((png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"invalid after png_start_read_image or png_read_update_info");
|
"invalid after png_start_read_image or png_read_update_info");
|
||||||
|
|
||||||
else if (need_IHDR && (png_ptr->mode & PNG_HAVE_IHDR) == 0)
|
else if (need_IHDR && (png_ptr->mode & PNG_HAVE_IHDR) == 0)
|
||||||
png_app_error(png_ptr, "invalid before the PNG header has been read");
|
png_app_error(png_ptr, "invalid before the PNG header has been read");
|
||||||
@ -209,7 +209,7 @@ png_set_strip_alpha(png_structrp png_ptr)
|
|||||||
#if defined(PNG_READ_ALPHA_MODE_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)
|
#if defined(PNG_READ_ALPHA_MODE_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)
|
||||||
static png_fixed_point
|
static png_fixed_point
|
||||||
translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
|
translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
|
||||||
int is_screen)
|
int is_screen)
|
||||||
{
|
{
|
||||||
/* Check for flag values. The main reason for having the old Mac value as a
|
/* Check for flag values. The main reason for having the old Mac value as a
|
||||||
* flag is that it is pretty near impossible to work out what the correct
|
* flag is that it is pretty near impossible to work out what the correct
|
||||||
@ -273,7 +273,7 @@ convert_gamma_value(png_structrp png_ptr, double output_gamma)
|
|||||||
#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
|
#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
|
||||||
void PNGFAPI
|
void PNGFAPI
|
||||||
png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
|
png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
|
||||||
png_fixed_point output_gamma)
|
png_fixed_point output_gamma)
|
||||||
{
|
{
|
||||||
int compose = 0;
|
int compose = 0;
|
||||||
png_fixed_point file_gamma;
|
png_fixed_point file_gamma;
|
||||||
@ -377,7 +377,7 @@ png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
|
|||||||
|
|
||||||
if ((png_ptr->transformations & PNG_COMPOSE) != 0)
|
if ((png_ptr->transformations & PNG_COMPOSE) != 0)
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"conflicting calls to set alpha mode and background");
|
"conflicting calls to set alpha mode and background");
|
||||||
|
|
||||||
png_ptr->transformations |= PNG_COMPOSE;
|
png_ptr->transformations |= PNG_COMPOSE;
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ void PNGAPI
|
|||||||
png_set_alpha_mode(png_structrp png_ptr, int mode, double output_gamma)
|
png_set_alpha_mode(png_structrp png_ptr, int mode, double output_gamma)
|
||||||
{
|
{
|
||||||
png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
|
png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
|
||||||
output_gamma));
|
output_gamma));
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -802,7 +802,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette,
|
|||||||
#ifdef PNG_READ_GAMMA_SUPPORTED
|
#ifdef PNG_READ_GAMMA_SUPPORTED
|
||||||
void PNGFAPI
|
void PNGFAPI
|
||||||
png_set_gamma_fixed(png_structrp png_ptr, png_fixed_point scrn_gamma,
|
png_set_gamma_fixed(png_structrp png_ptr, png_fixed_point scrn_gamma,
|
||||||
png_fixed_point file_gamma)
|
png_fixed_point file_gamma)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_set_gamma_fixed");
|
png_debug(1, "in png_set_gamma_fixed");
|
||||||
|
|
||||||
@ -844,7 +844,7 @@ void PNGAPI
|
|||||||
png_set_gamma(png_structrp png_ptr, double scrn_gamma, double file_gamma)
|
png_set_gamma(png_structrp png_ptr, double scrn_gamma, double file_gamma)
|
||||||
{
|
{
|
||||||
png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
|
png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
|
||||||
convert_gamma_value(png_ptr, file_gamma));
|
convert_gamma_value(png_ptr, file_gamma));
|
||||||
}
|
}
|
||||||
# endif /* FLOATING_POINT */
|
# endif /* FLOATING_POINT */
|
||||||
#endif /* READ_GAMMA */
|
#endif /* READ_GAMMA */
|
||||||
@ -990,7 +990,7 @@ png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
|
|||||||
* that it just worked and get a memory overwrite.
|
* that it just worked and get a memory overwrite.
|
||||||
*/
|
*/
|
||||||
png_error(png_ptr,
|
png_error(png_ptr,
|
||||||
"Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED");
|
"Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED");
|
||||||
|
|
||||||
/* png_ptr->transformations &= ~PNG_RGB_TO_GRAY; */
|
/* png_ptr->transformations &= ~PNG_RGB_TO_GRAY; */
|
||||||
}
|
}
|
||||||
@ -1017,7 +1017,7 @@ png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
|
|||||||
{
|
{
|
||||||
if (red >= 0 && green >= 0)
|
if (red >= 0 && green >= 0)
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"ignoring out of range rgb_to_gray coefficients");
|
"ignoring out of range rgb_to_gray coefficients");
|
||||||
|
|
||||||
/* Use the defaults, from the cHRM chunk if set, else the historical
|
/* Use the defaults, from the cHRM chunk if set, else the historical
|
||||||
* values which are close to the sRGB/HDTV/ITU-Rec 709 values. See
|
* values which are close to the sRGB/HDTV/ITU-Rec 709 values. See
|
||||||
@ -1026,7 +1026,7 @@ png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
|
|||||||
* something has already provided a default.
|
* something has already provided a default.
|
||||||
*/
|
*/
|
||||||
if (png_ptr->rgb_to_gray_red_coeff == 0 &&
|
if (png_ptr->rgb_to_gray_red_coeff == 0 &&
|
||||||
png_ptr->rgb_to_gray_green_coeff == 0)
|
png_ptr->rgb_to_gray_green_coeff == 0)
|
||||||
{
|
{
|
||||||
png_ptr->rgb_to_gray_red_coeff = 6968;
|
png_ptr->rgb_to_gray_red_coeff = 6968;
|
||||||
png_ptr->rgb_to_gray_green_coeff = 23434;
|
png_ptr->rgb_to_gray_green_coeff = 23434;
|
||||||
@ -1043,10 +1043,10 @@ png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
|
|||||||
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_rgb_to_gray(png_structrp png_ptr, int error_action, double red,
|
png_set_rgb_to_gray(png_structrp png_ptr, int error_action, double red,
|
||||||
double green)
|
double green)
|
||||||
{
|
{
|
||||||
png_set_rgb_to_gray_fixed(png_ptr, error_action,
|
png_set_rgb_to_gray_fixed(png_ptr, error_action,
|
||||||
png_fixed(png_ptr, red, "rgb to gray red coefficient"),
|
png_fixed(png_ptr, red, "rgb to gray red coefficient"),
|
||||||
png_fixed(png_ptr, green, "rgb to gray green coefficient"));
|
png_fixed(png_ptr, green, "rgb to gray green coefficient"));
|
||||||
}
|
}
|
||||||
#endif /* FLOATING POINT */
|
#endif /* FLOATING POINT */
|
||||||
@ -1303,7 +1303,7 @@ png_init_read_transformations(png_structrp png_ptr)
|
|||||||
{
|
{
|
||||||
if (png_ptr->screen_gamma != 0) /* screen set too */
|
if (png_ptr->screen_gamma != 0) /* screen set too */
|
||||||
gamma_correction = png_gamma_threshold(png_ptr->colorspace.gamma,
|
gamma_correction = png_gamma_threshold(png_ptr->colorspace.gamma,
|
||||||
png_ptr->screen_gamma);
|
png_ptr->screen_gamma);
|
||||||
|
|
||||||
else
|
else
|
||||||
/* Assume the output matches the input; a long time default behavior
|
/* Assume the output matches the input; a long time default behavior
|
||||||
@ -1584,7 +1584,7 @@ png_init_read_transformations(png_structrp png_ptr)
|
|||||||
*/
|
*/
|
||||||
if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
|
if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"libpng does not support gamma+background+rgb_to_gray");
|
"libpng does not support gamma+background+rgb_to_gray");
|
||||||
|
|
||||||
if ((png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) != 0)
|
if ((png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) != 0)
|
||||||
{
|
{
|
||||||
@ -1620,13 +1620,13 @@ png_init_read_transformations(png_structrp png_ptr)
|
|||||||
case PNG_BACKGROUND_GAMMA_FILE:
|
case PNG_BACKGROUND_GAMMA_FILE:
|
||||||
g = png_reciprocal(png_ptr->colorspace.gamma);
|
g = png_reciprocal(png_ptr->colorspace.gamma);
|
||||||
gs = png_reciprocal2(png_ptr->colorspace.gamma,
|
gs = png_reciprocal2(png_ptr->colorspace.gamma,
|
||||||
png_ptr->screen_gamma);
|
png_ptr->screen_gamma);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PNG_BACKGROUND_GAMMA_UNIQUE:
|
case PNG_BACKGROUND_GAMMA_UNIQUE:
|
||||||
g = png_reciprocal(png_ptr->background_gamma);
|
g = png_reciprocal(png_ptr->background_gamma);
|
||||||
gs = png_reciprocal2(png_ptr->background_gamma,
|
gs = png_reciprocal2(png_ptr->background_gamma,
|
||||||
png_ptr->screen_gamma);
|
png_ptr->screen_gamma);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g = PNG_FP_1; /* back_1 */
|
g = PNG_FP_1; /* back_1 */
|
||||||
@ -1654,11 +1654,11 @@ png_init_read_transformations(png_structrp png_ptr)
|
|||||||
if (png_gamma_significant(g) != 0)
|
if (png_gamma_significant(g) != 0)
|
||||||
{
|
{
|
||||||
back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
|
back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
|
||||||
g);
|
g);
|
||||||
back_1.green = png_gamma_8bit_correct(
|
back_1.green = png_gamma_8bit_correct(
|
||||||
png_ptr->background.green, g);
|
png_ptr->background.green, g);
|
||||||
back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
|
back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
|
||||||
g);
|
g);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -1729,7 +1729,7 @@ png_init_read_transformations(png_structrp png_ptr)
|
|||||||
case PNG_BACKGROUND_GAMMA_FILE:
|
case PNG_BACKGROUND_GAMMA_FILE:
|
||||||
g = png_reciprocal(png_ptr->colorspace.gamma);
|
g = png_reciprocal(png_ptr->colorspace.gamma);
|
||||||
gs = png_reciprocal2(png_ptr->colorspace.gamma,
|
gs = png_reciprocal2(png_ptr->colorspace.gamma,
|
||||||
png_ptr->screen_gamma);
|
png_ptr->screen_gamma);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PNG_BACKGROUND_GAMMA_UNIQUE:
|
case PNG_BACKGROUND_GAMMA_UNIQUE:
|
||||||
@ -4195,7 +4195,7 @@ png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
png_do_expand_palette(png_row_infop row_info, png_bytep row,
|
png_do_expand_palette(png_row_infop row_info, png_bytep row,
|
||||||
png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)
|
png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)
|
||||||
{
|
{
|
||||||
int shift, value;
|
int shift, value;
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
@ -4502,7 +4502,7 @@ png_do_expand(png_row_infop row_info, png_bytep row,
|
|||||||
row_info->channels = 2;
|
row_info->channels = 2;
|
||||||
row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);
|
row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);
|
||||||
row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
|
row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
|
||||||
row_width);
|
row_width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (row_info->color_type == PNG_COLOR_TYPE_RGB &&
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB &&
|
||||||
@ -4762,7 +4762,7 @@ png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
(row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
|
(row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
|
||||||
row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
|
row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
|
||||||
png_do_strip_channel(row_info, png_ptr->row_buf + 1,
|
png_do_strip_channel(row_info, png_ptr->row_buf + 1,
|
||||||
0 /* at_start == false, because SWAP_ALPHA happens later */);
|
0 /* at_start == false, because SWAP_ALPHA happens later */);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
|
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
|
||||||
|
|||||||
192
pngrutil.c
192
pngrutil.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrutil.c - utilities to read a PNG file
|
/* pngrutil.c - utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.20 [December 3, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -90,7 +90,7 @@ png_get_int_32)(png_const_bytep buf)
|
|||||||
|
|
||||||
uval = (uval ^ 0xffffffff) + 1; /* 2's complement: -x = ~x+1 */
|
uval = (uval ^ 0xffffffff) + 1; /* 2's complement: -x = ~x+1 */
|
||||||
if ((uval & 0x80000000) == 0) /* no overflow */
|
if ((uval & 0x80000000) == 0) /* no overflow */
|
||||||
return -(png_int_32)uval;
|
return -(png_int_32)uval;
|
||||||
/* The following has to be safe; this function only gets called on PNG data
|
/* 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
|
* 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.
|
* if not then an attacker would surely just generate a PNG with 0 instead.
|
||||||
@ -590,6 +590,7 @@ png_inflate(png_structrp png_ptr, png_uint_32 owner, int finish,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_zTXt_SUPPORTED) || defined (PNG_READ_iTXt_SUPPORTED)
|
||||||
/*
|
/*
|
||||||
* Decompress trailing data in a chunk. The assumption is that read_buffer
|
* Decompress trailing data in a chunk. The assumption is that read_buffer
|
||||||
* points at an allocated area holding the contents of a chunk with a
|
* points at an allocated area holding the contents of a chunk with a
|
||||||
@ -599,9 +600,9 @@ png_inflate(png_structrp png_ptr, png_uint_32 owner, int finish,
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
png_decompress_chunk(png_structrp png_ptr,
|
png_decompress_chunk(png_structrp png_ptr,
|
||||||
png_uint_32 chunklength, png_uint_32 prefix_size,
|
png_uint_32 chunklength, png_uint_32 prefix_size,
|
||||||
png_alloc_size_t *newlength /* must be initialized to the maximum! */,
|
png_alloc_size_t *newlength /* must be initialized to the maximum! */,
|
||||||
int terminate /*add a '\0' to the end of the uncompressed data*/)
|
int terminate /*add a '\0' to the end of the uncompressed data*/)
|
||||||
{
|
{
|
||||||
/* TODO: implement different limits for different types of chunk.
|
/* TODO: implement different limits for different types of chunk.
|
||||||
*
|
*
|
||||||
@ -638,8 +639,8 @@ png_decompress_chunk(png_structrp png_ptr,
|
|||||||
png_uint_32 lzsize = chunklength - prefix_size;
|
png_uint_32 lzsize = chunklength - prefix_size;
|
||||||
|
|
||||||
ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
|
ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
|
||||||
/* input: */ png_ptr->read_buffer + prefix_size, &lzsize,
|
/* input: */ png_ptr->read_buffer + prefix_size, &lzsize,
|
||||||
/* output: */ NULL, newlength);
|
/* output: */ NULL, newlength);
|
||||||
|
|
||||||
if (ret == Z_STREAM_END)
|
if (ret == Z_STREAM_END)
|
||||||
{
|
{
|
||||||
@ -659,15 +660,15 @@ png_decompress_chunk(png_structrp png_ptr,
|
|||||||
*/
|
*/
|
||||||
png_alloc_size_t new_size = *newlength;
|
png_alloc_size_t new_size = *newlength;
|
||||||
png_alloc_size_t buffer_size = prefix_size + new_size +
|
png_alloc_size_t buffer_size = prefix_size + new_size +
|
||||||
(terminate != 0);
|
(terminate != 0);
|
||||||
png_bytep text = png_voidcast(png_bytep, png_malloc_base(png_ptr,
|
png_bytep text = png_voidcast(png_bytep, png_malloc_base(png_ptr,
|
||||||
buffer_size));
|
buffer_size));
|
||||||
|
|
||||||
if (text != NULL)
|
if (text != NULL)
|
||||||
{
|
{
|
||||||
ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
|
ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
|
||||||
png_ptr->read_buffer + prefix_size, &lzsize,
|
png_ptr->read_buffer + prefix_size, &lzsize,
|
||||||
text + prefix_size, newlength);
|
text + prefix_size, newlength);
|
||||||
|
|
||||||
if (ret == Z_STREAM_END)
|
if (ret == Z_STREAM_END)
|
||||||
{
|
{
|
||||||
@ -754,6 +755,7 @@ png_decompress_chunk(png_structrp png_ptr,
|
|||||||
return Z_MEM_ERROR;
|
return Z_MEM_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* READ_zTXt || READ_iTXt */
|
||||||
#endif /* READ_COMPRESSED_TEXT */
|
#endif /* READ_COMPRESSED_TEXT */
|
||||||
|
|
||||||
#ifdef PNG_READ_iCCP_SUPPORTED
|
#ifdef PNG_READ_iCCP_SUPPORTED
|
||||||
@ -762,8 +764,8 @@ png_decompress_chunk(png_structrp png_ptr,
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
|
png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
|
||||||
png_uint_32p chunk_bytes, png_bytep next_out, png_alloc_size_t *out_size,
|
png_uint_32p chunk_bytes, png_bytep next_out, png_alloc_size_t *out_size,
|
||||||
int finish)
|
int finish)
|
||||||
{
|
{
|
||||||
if (png_ptr->zowner == png_ptr->chunk_name)
|
if (png_ptr->zowner == png_ptr->chunk_name)
|
||||||
{
|
{
|
||||||
@ -802,8 +804,8 @@ png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
|
|||||||
* the available output is produced; this allows reading of truncated
|
* the available output is produced; this allows reading of truncated
|
||||||
* streams.
|
* streams.
|
||||||
*/
|
*/
|
||||||
ret = PNG_INFLATE(png_ptr,
|
ret = PNG_INFLATE(png_ptr, *chunk_bytes > 0 ?
|
||||||
*chunk_bytes > 0 ? Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
||||||
}
|
}
|
||||||
while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
|
while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
|
||||||
|
|
||||||
@ -1292,7 +1294,7 @@ png_handle_cHRM(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
png_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
|
png_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
|
||||||
(void)png_colorspace_set_chromaticities(png_ptr, &png_ptr->colorspace, &xy,
|
(void)png_colorspace_set_chromaticities(png_ptr, &png_ptr->colorspace, &xy,
|
||||||
1/*prefer cHRM values*/);
|
1/*prefer cHRM values*/);
|
||||||
png_colorspace_sync(png_ptr, info_ptr);
|
png_colorspace_sync(png_ptr, info_ptr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1432,8 +1434,8 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
png_ptr->zstream.next_in = (Bytef*)keyword + (keyword_length+2);
|
png_ptr->zstream.next_in = (Bytef*)keyword + (keyword_length+2);
|
||||||
png_ptr->zstream.avail_in = read_length;
|
png_ptr->zstream.avail_in = read_length;
|
||||||
(void)png_inflate_read(png_ptr, local_buffer,
|
(void)png_inflate_read(png_ptr, local_buffer,
|
||||||
(sizeof local_buffer), &length, profile_header, &size,
|
(sizeof local_buffer), &length, profile_header, &size,
|
||||||
0/*finish: don't, because the output is too small*/);
|
0/*finish: don't, because the output is too small*/);
|
||||||
|
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
{
|
{
|
||||||
@ -1443,14 +1445,14 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
png_get_uint_32(profile_header);
|
png_get_uint_32(profile_header);
|
||||||
|
|
||||||
if (png_icc_check_length(png_ptr, &png_ptr->colorspace,
|
if (png_icc_check_length(png_ptr, &png_ptr->colorspace,
|
||||||
keyword, profile_length) != 0)
|
keyword, profile_length) != 0)
|
||||||
{
|
{
|
||||||
/* The length is apparently ok, so we can check the 132
|
/* The length is apparently ok, so we can check the 132
|
||||||
* byte header.
|
* byte header.
|
||||||
*/
|
*/
|
||||||
if (png_icc_check_header(png_ptr, &png_ptr->colorspace,
|
if (png_icc_check_header(png_ptr, &png_ptr->colorspace,
|
||||||
keyword, profile_length, profile_header,
|
keyword, profile_length, profile_header,
|
||||||
png_ptr->color_type) != 0)
|
png_ptr->color_type) != 0)
|
||||||
{
|
{
|
||||||
/* Now read the tag table; a variable size buffer is
|
/* Now read the tag table; a variable size buffer is
|
||||||
* needed at this point, allocate one for the whole
|
* needed at this point, allocate one for the whole
|
||||||
@ -1458,20 +1460,20 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
* that none of these stuff will overflow.
|
* that none of these stuff will overflow.
|
||||||
*/
|
*/
|
||||||
const png_uint_32 tag_count = png_get_uint_32(
|
const png_uint_32 tag_count = png_get_uint_32(
|
||||||
profile_header+128);
|
profile_header+128);
|
||||||
png_bytep profile = png_read_buffer(png_ptr,
|
png_bytep profile = png_read_buffer(png_ptr,
|
||||||
profile_length, 2/*silent*/);
|
profile_length, 2/*silent*/);
|
||||||
|
|
||||||
if (profile != NULL)
|
if (profile != NULL)
|
||||||
{
|
{
|
||||||
memcpy(profile, profile_header,
|
memcpy(profile, profile_header,
|
||||||
(sizeof profile_header));
|
(sizeof profile_header));
|
||||||
|
|
||||||
size = 12 * tag_count;
|
size = 12 * tag_count;
|
||||||
|
|
||||||
(void)png_inflate_read(png_ptr, local_buffer,
|
(void)png_inflate_read(png_ptr, local_buffer,
|
||||||
(sizeof local_buffer), &length,
|
(sizeof local_buffer), &length,
|
||||||
profile + (sizeof profile_header), &size, 0);
|
profile + (sizeof profile_header), &size, 0);
|
||||||
|
|
||||||
/* Still expect a buffer error because we expect
|
/* Still expect a buffer error because we expect
|
||||||
* there to be some tag data!
|
* there to be some tag data!
|
||||||
@ -1479,22 +1481,22 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
if (size == 0)
|
if (size == 0)
|
||||||
{
|
{
|
||||||
if (png_icc_check_tag_table(png_ptr,
|
if (png_icc_check_tag_table(png_ptr,
|
||||||
&png_ptr->colorspace, keyword, profile_length,
|
&png_ptr->colorspace, keyword, profile_length,
|
||||||
profile) != 0)
|
profile) != 0)
|
||||||
{
|
{
|
||||||
/* The profile has been validated for basic
|
/* The profile has been validated for basic
|
||||||
* security issues, so read the whole thing in.
|
* security issues, so read the whole thing in.
|
||||||
*/
|
*/
|
||||||
size = profile_length - (sizeof profile_header)
|
size = profile_length - (sizeof profile_header)
|
||||||
- 12 * tag_count;
|
- 12 * tag_count;
|
||||||
|
|
||||||
(void)png_inflate_read(png_ptr, local_buffer,
|
(void)png_inflate_read(png_ptr, local_buffer,
|
||||||
(sizeof local_buffer), &length,
|
(sizeof local_buffer), &length,
|
||||||
profile + (sizeof profile_header) +
|
profile + (sizeof profile_header) +
|
||||||
12 * tag_count, &size, 1/*finish*/);
|
12 * tag_count, &size, 1/*finish*/);
|
||||||
|
|
||||||
if (length > 0 && !(png_ptr->flags &
|
if (length > 0 && !(png_ptr->flags &
|
||||||
PNG_FLAG_BENIGN_ERRORS_WARN))
|
PNG_FLAG_BENIGN_ERRORS_WARN))
|
||||||
errmsg = "extra compressed data";
|
errmsg = "extra compressed data";
|
||||||
|
|
||||||
/* But otherwise allow extra data: */
|
/* But otherwise allow extra data: */
|
||||||
@ -1506,34 +1508,34 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
* keep going.
|
* keep going.
|
||||||
*/
|
*/
|
||||||
png_chunk_warning(png_ptr,
|
png_chunk_warning(png_ptr,
|
||||||
"extra compressed data");
|
"extra compressed data");
|
||||||
}
|
}
|
||||||
|
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
finished = 1;
|
finished = 1;
|
||||||
|
|
||||||
# ifdef PNG_sRGB_SUPPORTED
|
# if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
|
||||||
/* Check for a match against sRGB */
|
/* Check for a match against sRGB */
|
||||||
png_icc_set_sRGB(png_ptr,
|
png_icc_set_sRGB(png_ptr,
|
||||||
&png_ptr->colorspace, profile,
|
&png_ptr->colorspace, profile,
|
||||||
png_ptr->zstream.adler);
|
png_ptr->zstream.adler);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Steal the profile for info_ptr. */
|
/* Steal the profile for info_ptr. */
|
||||||
if (info_ptr != NULL)
|
if (info_ptr != NULL)
|
||||||
{
|
{
|
||||||
png_free_data(png_ptr, info_ptr,
|
png_free_data(png_ptr, info_ptr,
|
||||||
PNG_FREE_ICCP, 0);
|
PNG_FREE_ICCP, 0);
|
||||||
|
|
||||||
info_ptr->iccp_name = png_voidcast(char*,
|
info_ptr->iccp_name = png_voidcast(char*,
|
||||||
png_malloc_base(png_ptr,
|
png_malloc_base(png_ptr,
|
||||||
keyword_length+1));
|
keyword_length+1));
|
||||||
if (info_ptr->iccp_name != NULL)
|
if (info_ptr->iccp_name != NULL)
|
||||||
{
|
{
|
||||||
memcpy(info_ptr->iccp_name, keyword,
|
memcpy(info_ptr->iccp_name, keyword,
|
||||||
keyword_length+1);
|
keyword_length+1);
|
||||||
info_ptr->iccp_proflen =
|
info_ptr->iccp_proflen =
|
||||||
profile_length;
|
profile_length;
|
||||||
info_ptr->iccp_profile = profile;
|
info_ptr->iccp_profile = profile;
|
||||||
png_ptr->read_buffer = NULL; /*steal*/
|
png_ptr->read_buffer = NULL; /*steal*/
|
||||||
info_ptr->free_me |= PNG_FREE_ICCP;
|
info_ptr->free_me |= PNG_FREE_ICCP;
|
||||||
@ -2270,7 +2272,7 @@ png_handle_pCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
png_set_pCAL(png_ptr, info_ptr, (png_charp)buffer, X0, X1, type, nparams,
|
png_set_pCAL(png_ptr, info_ptr, (png_charp)buffer, X0, X1, type, nparams,
|
||||||
(png_charp)units, params);
|
(png_charp)units, params);
|
||||||
|
|
||||||
png_free(png_ptr, params);
|
png_free(png_ptr, params);
|
||||||
}
|
}
|
||||||
@ -2313,7 +2315,7 @@ png_handle_sCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
png_debug1(2, "Allocating and reading sCAL chunk data (%u bytes)",
|
png_debug1(2, "Allocating and reading sCAL chunk data (%u bytes)",
|
||||||
length + 1);
|
length + 1);
|
||||||
|
|
||||||
buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
|
buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
|
||||||
|
|
||||||
@ -2365,7 +2367,7 @@ png_handle_sCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
else
|
else
|
||||||
/* This is the (only) success case. */
|
/* This is the (only) success case. */
|
||||||
png_set_sCAL_s(png_ptr, info_ptr, buffer[0],
|
png_set_sCAL_s(png_ptr, info_ptr, buffer[0],
|
||||||
(png_charp)buffer+1, (png_charp)buffer+heighti);
|
(png_charp)buffer+1, (png_charp)buffer+heighti);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2465,8 +2467,8 @@ png_handle_tEXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
|
|
||||||
if (buffer == NULL)
|
if (buffer == NULL)
|
||||||
{
|
{
|
||||||
png_chunk_benign_error(png_ptr, "out of memory");
|
png_chunk_benign_error(png_ptr, "out of memory");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
png_crc_read(png_ptr, buffer, length);
|
png_crc_read(png_ptr, buffer, length);
|
||||||
@ -2573,7 +2575,7 @@ png_handle_zTXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
* and text chunks.
|
* and text chunks.
|
||||||
*/
|
*/
|
||||||
if (png_decompress_chunk(png_ptr, length, keyword_length+2,
|
if (png_decompress_chunk(png_ptr, length, keyword_length+2,
|
||||||
&uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
|
&uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
|
||||||
{
|
{
|
||||||
png_text text;
|
png_text text;
|
||||||
|
|
||||||
@ -2713,7 +2715,7 @@ png_handle_iTXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
* iCCP and text chunks.
|
* iCCP and text chunks.
|
||||||
*/
|
*/
|
||||||
if (png_decompress_chunk(png_ptr, length, prefix_length,
|
if (png_decompress_chunk(png_ptr, length, prefix_length,
|
||||||
&uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
|
&uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
|
||||||
buffer = png_ptr->read_buffer;
|
buffer = png_ptr->read_buffer;
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -2793,7 +2795,7 @@ png_cache_unknown_chunk(png_structrp png_ptr, png_uint_32 length)
|
|||||||
{
|
{
|
||||||
/* Do a 'warn' here - it is handled below. */
|
/* Do a 'warn' here - it is handled below. */
|
||||||
png_ptr->unknown_chunk.data = png_voidcast(png_bytep,
|
png_ptr->unknown_chunk.data = png_voidcast(png_bytep,
|
||||||
png_malloc_warn(png_ptr, length));
|
png_malloc_warn(png_ptr, length));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2818,7 +2820,7 @@ png_cache_unknown_chunk(png_structrp png_ptr, png_uint_32 length)
|
|||||||
/* Handle an unknown, or known but disabled, chunk */
|
/* Handle an unknown, or known but disabled, chunk */
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
png_uint_32 length, int keep)
|
png_uint_32 length, int keep)
|
||||||
{
|
{
|
||||||
int handled = 0; /* the chunk was handled */
|
int handled = 0; /* the chunk was handled */
|
||||||
|
|
||||||
@ -2856,7 +2858,7 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
{
|
{
|
||||||
/* Callback to user unknown chunk handler */
|
/* Callback to user unknown chunk handler */
|
||||||
int ret = (*(png_ptr->read_user_chunk_fn))(png_ptr,
|
int ret = (*(png_ptr->read_user_chunk_fn))(png_ptr,
|
||||||
&png_ptr->unknown_chunk);
|
&png_ptr->unknown_chunk);
|
||||||
|
|
||||||
/* ret is:
|
/* ret is:
|
||||||
* negative: An error occurred; png_chunk_error will be called.
|
* negative: An error occurred; png_chunk_error will be called.
|
||||||
@ -2890,9 +2892,9 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
{
|
{
|
||||||
png_chunk_warning(png_ptr, "Saving unknown chunk:");
|
png_chunk_warning(png_ptr, "Saving unknown chunk:");
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"forcing save of an unhandled chunk;"
|
"forcing save of an unhandled chunk;"
|
||||||
" please call png_set_keep_unknown_chunks");
|
" please call png_set_keep_unknown_chunks");
|
||||||
/* with keep = PNG_HANDLE_CHUNK_IF_SAFE */
|
/* with keep = PNG_HANDLE_CHUNK_IF_SAFE */
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
keep = PNG_HANDLE_CHUNK_IF_SAFE;
|
keep = PNG_HANDLE_CHUNK_IF_SAFE;
|
||||||
@ -2985,7 +2987,7 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
* out; store the chunk.
|
* out; store the chunk.
|
||||||
*/
|
*/
|
||||||
png_set_unknown_chunks(png_ptr, info_ptr,
|
png_set_unknown_chunks(png_ptr, info_ptr,
|
||||||
&png_ptr->unknown_chunk, 1);
|
&png_ptr->unknown_chunk, 1);
|
||||||
handled = 1;
|
handled = 1;
|
||||||
# ifdef PNG_USER_LIMITS_SUPPORTED
|
# ifdef PNG_USER_LIMITS_SUPPORTED
|
||||||
break;
|
break;
|
||||||
@ -3418,8 +3420,8 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
|
|||||||
/* Everything is aligned for png_uint_16 copies, but try for
|
/* Everything is aligned for png_uint_16 copies, but try for
|
||||||
* png_uint_32 first.
|
* png_uint_32 first.
|
||||||
*/
|
*/
|
||||||
if (png_isaligned(dp, png_uint_32) != 0 &&
|
if (png_isaligned(dp, png_uint_32) &&
|
||||||
png_isaligned(sp, png_uint_32) != 0 &&
|
png_isaligned(sp, png_uint_32) &&
|
||||||
bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
|
bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
|
||||||
bytes_to_jump % (sizeof (png_uint_32)) == 0)
|
bytes_to_jump % (sizeof (png_uint_32)) == 0)
|
||||||
{
|
{
|
||||||
@ -3539,7 +3541,7 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
|
|||||||
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
||||||
png_uint_32 transformations /* Because these may affect the byte layout */)
|
png_uint_32 transformations /* Because these may affect the byte layout */)
|
||||||
{
|
{
|
||||||
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
/* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
||||||
/* Offset to next interlace block */
|
/* Offset to next interlace block */
|
||||||
@ -3783,7 +3785,7 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
png_read_filter_row_sub(png_row_infop row_info, png_bytep row,
|
png_read_filter_row_sub(png_row_infop row_info, png_bytep row,
|
||||||
png_const_bytep prev_row)
|
png_const_bytep prev_row)
|
||||||
{
|
{
|
||||||
png_size_t i;
|
png_size_t i;
|
||||||
png_size_t istop = row_info->rowbytes;
|
png_size_t istop = row_info->rowbytes;
|
||||||
@ -3801,7 +3803,7 @@ png_read_filter_row_sub(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
png_read_filter_row_up(png_row_infop row_info, png_bytep row,
|
png_read_filter_row_up(png_row_infop row_info, png_bytep row,
|
||||||
png_const_bytep prev_row)
|
png_const_bytep prev_row)
|
||||||
{
|
{
|
||||||
png_size_t i;
|
png_size_t i;
|
||||||
png_size_t istop = row_info->rowbytes;
|
png_size_t istop = row_info->rowbytes;
|
||||||
@ -3817,7 +3819,7 @@ png_read_filter_row_up(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
png_read_filter_row_avg(png_row_infop row_info, png_bytep row,
|
png_read_filter_row_avg(png_row_infop row_info, png_bytep row,
|
||||||
png_const_bytep prev_row)
|
png_const_bytep prev_row)
|
||||||
{
|
{
|
||||||
png_size_t i;
|
png_size_t i;
|
||||||
png_bytep rp = row;
|
png_bytep rp = row;
|
||||||
@ -3844,7 +3846,7 @@ png_read_filter_row_avg(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
png_read_filter_row_paeth_1byte_pixel(png_row_infop row_info, png_bytep row,
|
png_read_filter_row_paeth_1byte_pixel(png_row_infop row_info, png_bytep row,
|
||||||
png_const_bytep prev_row)
|
png_const_bytep prev_row)
|
||||||
{
|
{
|
||||||
png_bytep rp_end = row + row_info->rowbytes;
|
png_bytep rp_end = row + row_info->rowbytes;
|
||||||
int a, c;
|
int a, c;
|
||||||
@ -3892,7 +3894,7 @@ png_read_filter_row_paeth_1byte_pixel(png_row_infop row_info, png_bytep row,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row,
|
png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row,
|
||||||
png_const_bytep prev_row)
|
png_const_bytep prev_row)
|
||||||
{
|
{
|
||||||
int bpp = (row_info->pixel_depth + 7) >> 3;
|
int bpp = (row_info->pixel_depth + 7) >> 3;
|
||||||
png_bytep rp_end = row + bpp;
|
png_bytep rp_end = row + bpp;
|
||||||
@ -3977,7 +3979,7 @@ png_init_filter_functions(png_structrp pp)
|
|||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_read_filter_row(png_structrp pp, png_row_infop row_info, png_bytep row,
|
png_read_filter_row(png_structrp pp, png_row_infop row_info, png_bytep row,
|
||||||
png_const_bytep prev_row, int filter)
|
png_const_bytep prev_row, int filter)
|
||||||
{
|
{
|
||||||
/* OPTIMIZATION: DO NOT MODIFY THIS FUNCTION, instead #define
|
/* OPTIMIZATION: DO NOT MODIFY THIS FUNCTION, instead #define
|
||||||
* PNG_FILTER_OPTIMIZATIONS to a function that overrides the generic
|
* PNG_FILTER_OPTIMIZATIONS to a function that overrides the generic
|
||||||
@ -3995,7 +3997,7 @@ png_read_filter_row(png_structrp pp, png_row_infop row_info, png_bytep row,
|
|||||||
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
|
png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
|
||||||
png_alloc_size_t avail_out)
|
png_alloc_size_t avail_out)
|
||||||
{
|
{
|
||||||
/* Loop reading IDATs and decompressing the result into output[avail_out] */
|
/* Loop reading IDATs and decompressing the result into output[avail_out] */
|
||||||
png_ptr->zstream.next_out = output;
|
png_ptr->zstream.next_out = output;
|
||||||
@ -4447,42 +4449,42 @@ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
|
|||||||
|
|
||||||
if (row_bytes + 48 > png_ptr->old_big_row_buf_size)
|
if (row_bytes + 48 > png_ptr->old_big_row_buf_size)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, png_ptr->big_row_buf);
|
png_free(png_ptr, png_ptr->big_row_buf);
|
||||||
png_free(png_ptr, png_ptr->big_prev_row);
|
png_free(png_ptr, png_ptr->big_prev_row);
|
||||||
|
|
||||||
if (png_ptr->interlaced != 0)
|
if (png_ptr->interlaced != 0)
|
||||||
png_ptr->big_row_buf = (png_bytep)png_calloc(png_ptr,
|
png_ptr->big_row_buf = (png_bytep)png_calloc(png_ptr,
|
||||||
row_bytes + 48);
|
row_bytes + 48);
|
||||||
|
|
||||||
else
|
else
|
||||||
png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
|
png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
|
||||||
|
|
||||||
png_ptr->big_prev_row = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
|
png_ptr->big_prev_row = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
|
||||||
|
|
||||||
#ifdef PNG_ALIGNED_MEMORY_SUPPORTED
|
#ifdef PNG_ALIGNED_MEMORY_SUPPORTED
|
||||||
/* Use 16-byte aligned memory for row_buf with at least 16 bytes
|
/* Use 16-byte aligned memory for row_buf with at least 16 bytes
|
||||||
* of padding before and after row_buf; treat prev_row similarly.
|
* of padding before and after row_buf; treat prev_row similarly.
|
||||||
* NOTE: the alignment is to the start of the pixels, one beyond the start
|
* NOTE: the alignment is to the start of the pixels, one beyond the start
|
||||||
* of the buffer, because of the filter byte. Prior to libpng 1.5.6 this
|
* of the buffer, because of the filter byte. Prior to libpng 1.5.6 this
|
||||||
* was incorrect; the filter byte was aligned, which had the exact
|
* was incorrect; the filter byte was aligned, which had the exact
|
||||||
* opposite effect of that intended.
|
* opposite effect of that intended.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
png_bytep temp = png_ptr->big_row_buf + 32;
|
png_bytep temp = png_ptr->big_row_buf + 32;
|
||||||
int extra = (int)((temp - (png_bytep)0) & 0x0f);
|
int extra = (int)((temp - (png_bytep)0) & 0x0f);
|
||||||
png_ptr->row_buf = temp - extra - 1/*filter byte*/;
|
png_ptr->row_buf = temp - extra - 1/*filter byte*/;
|
||||||
|
|
||||||
temp = png_ptr->big_prev_row + 32;
|
temp = png_ptr->big_prev_row + 32;
|
||||||
extra = (int)((temp - (png_bytep)0) & 0x0f);
|
extra = (int)((temp - (png_bytep)0) & 0x0f);
|
||||||
png_ptr->prev_row = temp - extra - 1/*filter byte*/;
|
png_ptr->prev_row = temp - extra - 1/*filter byte*/;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* Use 31 bytes of padding before and 17 bytes after row_buf. */
|
/* Use 31 bytes of padding before and 17 bytes after row_buf. */
|
||||||
png_ptr->row_buf = png_ptr->big_row_buf + 31;
|
png_ptr->row_buf = png_ptr->big_row_buf + 31;
|
||||||
png_ptr->prev_row = png_ptr->big_prev_row + 31;
|
png_ptr->prev_row = png_ptr->big_prev_row + 31;
|
||||||
#endif
|
#endif
|
||||||
png_ptr->old_big_row_buf_size = row_bytes + 48;
|
png_ptr->old_big_row_buf_size = row_bytes + 48;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_MAX_MALLOC_64K
|
#ifdef PNG_MAX_MALLOC_64K
|
||||||
|
|||||||
178
pngset.c
178
pngset.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.23 [June 9, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -104,14 +104,14 @@ png_set_cHRM(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
double green_x, double green_y, double blue_x, double blue_y)
|
double green_x, double green_y, double blue_x, double blue_y)
|
||||||
{
|
{
|
||||||
png_set_cHRM_fixed(png_ptr, info_ptr,
|
png_set_cHRM_fixed(png_ptr, info_ptr,
|
||||||
png_fixed(png_ptr, white_x, "cHRM White X"),
|
png_fixed(png_ptr, white_x, "cHRM White X"),
|
||||||
png_fixed(png_ptr, white_y, "cHRM White Y"),
|
png_fixed(png_ptr, white_y, "cHRM White Y"),
|
||||||
png_fixed(png_ptr, red_x, "cHRM 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_y, "cHRM Red Y"),
|
||||||
png_fixed(png_ptr, green_x, "cHRM Green X"),
|
png_fixed(png_ptr, green_x, "cHRM Green X"),
|
||||||
png_fixed(png_ptr, green_y, "cHRM Green Y"),
|
png_fixed(png_ptr, green_y, "cHRM Green Y"),
|
||||||
png_fixed(png_ptr, blue_x, "cHRM Blue X"),
|
png_fixed(png_ptr, blue_x, "cHRM Blue X"),
|
||||||
png_fixed(png_ptr, blue_y, "cHRM Blue Y"));
|
png_fixed(png_ptr, blue_y, "cHRM Blue Y"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
@ -120,15 +120,15 @@ png_set_cHRM_XYZ(png_const_structrp png_ptr, png_inforp info_ptr, double red_X,
|
|||||||
double blue_X, double blue_Y, double blue_Z)
|
double blue_X, double blue_Y, double blue_Z)
|
||||||
{
|
{
|
||||||
png_set_cHRM_XYZ_fixed(png_ptr, info_ptr,
|
png_set_cHRM_XYZ_fixed(png_ptr, info_ptr,
|
||||||
png_fixed(png_ptr, red_X, "cHRM 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_Y, "cHRM Red Y"),
|
||||||
png_fixed(png_ptr, red_Z, "cHRM Red Z"),
|
png_fixed(png_ptr, red_Z, "cHRM Red Z"),
|
||||||
png_fixed(png_ptr, green_X, "cHRM Green X"),
|
png_fixed(png_ptr, green_X, "cHRM Green X"),
|
||||||
png_fixed(png_ptr, green_Y, "cHRM Green Y"),
|
png_fixed(png_ptr, green_Y, "cHRM Green Y"),
|
||||||
png_fixed(png_ptr, green_Z, "cHRM Green Z"),
|
png_fixed(png_ptr, green_Z, "cHRM Green Z"),
|
||||||
png_fixed(png_ptr, blue_X, "cHRM Blue X"),
|
png_fixed(png_ptr, blue_X, "cHRM Blue X"),
|
||||||
png_fixed(png_ptr, blue_Y, "cHRM Blue Y"),
|
png_fixed(png_ptr, blue_Y, "cHRM Blue Y"),
|
||||||
png_fixed(png_ptr, blue_Z, "cHRM Blue Z"));
|
png_fixed(png_ptr, blue_Z, "cHRM Blue Z"));
|
||||||
}
|
}
|
||||||
# endif /* FLOATING_POINT */
|
# endif /* FLOATING_POINT */
|
||||||
|
|
||||||
@ -316,10 +316,10 @@ png_set_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
length = strlen(units) + 1;
|
length = strlen(units) + 1;
|
||||||
png_debug1(3, "allocating units for info (%lu bytes)",
|
png_debug1(3, "allocating units for info (%lu bytes)",
|
||||||
(unsigned long)length);
|
(unsigned long)length);
|
||||||
|
|
||||||
info_ptr->pcal_units = png_voidcast(png_charp,
|
info_ptr->pcal_units = png_voidcast(png_charp,
|
||||||
png_malloc_warn(png_ptr, length));
|
png_malloc_warn(png_ptr, length));
|
||||||
|
|
||||||
if (info_ptr->pcal_units == NULL)
|
if (info_ptr->pcal_units == NULL)
|
||||||
{
|
{
|
||||||
@ -398,7 +398,7 @@ png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthw);
|
png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthw);
|
||||||
|
|
||||||
info_ptr->scal_s_width = png_voidcast(png_charp,
|
info_ptr->scal_s_width = png_voidcast(png_charp,
|
||||||
png_malloc_warn(png_ptr, lengthw));
|
png_malloc_warn(png_ptr, lengthw));
|
||||||
|
|
||||||
if (info_ptr->scal_s_width == NULL)
|
if (info_ptr->scal_s_width == NULL)
|
||||||
{
|
{
|
||||||
@ -414,7 +414,7 @@ png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthh);
|
png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthh);
|
||||||
|
|
||||||
info_ptr->scal_s_height = png_voidcast(png_charp,
|
info_ptr->scal_s_height = png_voidcast(png_charp,
|
||||||
png_malloc_warn(png_ptr, lengthh));
|
png_malloc_warn(png_ptr, lengthh));
|
||||||
|
|
||||||
if (info_ptr->scal_s_height == NULL)
|
if (info_ptr->scal_s_height == NULL)
|
||||||
{
|
{
|
||||||
@ -453,9 +453,9 @@ png_set_sCAL(png_const_structrp png_ptr, png_inforp info_ptr, int unit,
|
|||||||
char sheight[PNG_sCAL_MAX_DIGITS+1];
|
char sheight[PNG_sCAL_MAX_DIGITS+1];
|
||||||
|
|
||||||
png_ascii_from_fp(png_ptr, swidth, (sizeof swidth), width,
|
png_ascii_from_fp(png_ptr, swidth, (sizeof swidth), width,
|
||||||
PNG_sCAL_PRECISION);
|
PNG_sCAL_PRECISION);
|
||||||
png_ascii_from_fp(png_ptr, sheight, (sizeof sheight), height,
|
png_ascii_from_fp(png_ptr, sheight, (sizeof sheight), height,
|
||||||
PNG_sCAL_PRECISION);
|
PNG_sCAL_PRECISION);
|
||||||
|
|
||||||
png_set_sCAL_s(png_ptr, info_ptr, unit, swidth, sheight);
|
png_set_sCAL_s(png_ptr, info_ptr, unit, swidth, sheight);
|
||||||
}
|
}
|
||||||
@ -648,7 +648,7 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int result = png_colorspace_set_ICC(png_ptr, &info_ptr->colorspace, name,
|
int result = png_colorspace_set_ICC(png_ptr, &info_ptr->colorspace, name,
|
||||||
proflen, profile, info_ptr->color_type);
|
proflen, profile, info_ptr->color_type);
|
||||||
|
|
||||||
png_colorspace_sync_info(png_ptr, info_ptr);
|
png_colorspace_sync_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
@ -673,7 +673,7 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
memcpy(new_iccp_name, name, length);
|
memcpy(new_iccp_name, name, length);
|
||||||
new_iccp_profile = png_voidcast(png_bytep,
|
new_iccp_profile = png_voidcast(png_bytep,
|
||||||
png_malloc_warn(png_ptr, proflen));
|
png_malloc_warn(png_ptr, proflen));
|
||||||
|
|
||||||
if (new_iccp_profile == NULL)
|
if (new_iccp_profile == NULL)
|
||||||
{
|
{
|
||||||
@ -748,14 +748,14 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
* the overflow checks.
|
* the overflow checks.
|
||||||
*/
|
*/
|
||||||
new_text = png_voidcast(png_textp,png_realloc_array(png_ptr,
|
new_text = png_voidcast(png_textp,png_realloc_array(png_ptr,
|
||||||
info_ptr->text, old_num_text, max_text-old_num_text,
|
info_ptr->text, old_num_text, max_text-old_num_text,
|
||||||
sizeof *new_text));
|
sizeof *new_text));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_text == NULL)
|
if (new_text == NULL)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "too many text chunks",
|
png_chunk_report(png_ptr, "too many text chunks",
|
||||||
PNG_CHUNK_WRITE_ERROR);
|
PNG_CHUNK_WRITE_ERROR);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -783,7 +783,7 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
text_ptr[i].compression >= PNG_TEXT_COMPRESSION_LAST)
|
text_ptr[i].compression >= PNG_TEXT_COMPRESSION_LAST)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "text compression mode is out of range",
|
png_chunk_report(png_ptr, "text compression mode is out of range",
|
||||||
PNG_CHUNK_WRITE_ERROR);
|
PNG_CHUNK_WRITE_ERROR);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -815,7 +815,7 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
# else /* iTXt */
|
# else /* iTXt */
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "iTXt chunk not supported",
|
png_chunk_report(png_ptr, "iTXt chunk not supported",
|
||||||
PNG_CHUNK_WRITE_ERROR);
|
PNG_CHUNK_WRITE_ERROR);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
@ -844,7 +844,7 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
if (textp->key == NULL)
|
if (textp->key == NULL)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "text chunk: out of memory",
|
png_chunk_report(png_ptr, "text chunk: out of memory",
|
||||||
PNG_CHUNK_WRITE_ERROR);
|
PNG_CHUNK_WRITE_ERROR);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -956,7 +956,7 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
{
|
{
|
||||||
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
|
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
|
||||||
info_ptr->trans_alpha = png_voidcast(png_bytep,
|
info_ptr->trans_alpha = png_voidcast(png_bytep,
|
||||||
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
|
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
|
||||||
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
|
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
|
||||||
}
|
}
|
||||||
png_ptr->trans_alpha = info_ptr->trans_alpha;
|
png_ptr->trans_alpha = info_ptr->trans_alpha;
|
||||||
@ -976,7 +976,7 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
trans_color->green > sample_max ||
|
trans_color->green > sample_max ||
|
||||||
trans_color->blue > sample_max)))
|
trans_color->blue > sample_max)))
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"tRNS chunk has out-of-range samples for bit_depth");
|
"tRNS chunk has out-of-range samples for bit_depth");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1018,8 +1018,8 @@ png_set_sPLT(png_const_structrp png_ptr,
|
|||||||
* overflows. Notice that the parameters are (int) and (size_t)
|
* overflows. Notice that the parameters are (int) and (size_t)
|
||||||
*/
|
*/
|
||||||
np = png_voidcast(png_sPLT_tp,png_realloc_array(png_ptr,
|
np = png_voidcast(png_sPLT_tp,png_realloc_array(png_ptr,
|
||||||
info_ptr->splt_palettes, info_ptr->splt_palettes_num, nentries,
|
info_ptr->splt_palettes, info_ptr->splt_palettes_num, nentries,
|
||||||
sizeof *np));
|
sizeof *np));
|
||||||
|
|
||||||
if (np == NULL)
|
if (np == NULL)
|
||||||
{
|
{
|
||||||
@ -1080,7 +1080,7 @@ png_set_sPLT(png_const_structrp png_ptr,
|
|||||||
* checked it when doing the allocation.
|
* checked it when doing the allocation.
|
||||||
*/
|
*/
|
||||||
memcpy(np->entries, entries->entries,
|
memcpy(np->entries, entries->entries,
|
||||||
entries->nentries * sizeof (png_sPLT_entry));
|
entries->nentries * sizeof (png_sPLT_entry));
|
||||||
|
|
||||||
/* Note that 'continue' skips the advance of the out pointer and out
|
/* Note that 'continue' skips the advance of the out pointer and out
|
||||||
* count, so an invalid entry is not added.
|
* count, so an invalid entry is not added.
|
||||||
@ -1110,10 +1110,10 @@ check_location(png_const_structrp png_ptr, int location)
|
|||||||
{
|
{
|
||||||
/* Write struct, so unknown chunks come from the app */
|
/* Write struct, so unknown chunks come from the app */
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"png_set_unknown_chunks now expects a valid location");
|
"png_set_unknown_chunks now expects a valid location");
|
||||||
/* Use the old behavior */
|
/* Use the old behavior */
|
||||||
location = (png_byte)(png_ptr->mode &
|
location = (png_byte)(png_ptr->mode &
|
||||||
(PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT));
|
(PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This need not be an internal error - if the app calls
|
/* This need not be an internal error - if the app calls
|
||||||
@ -1136,7 +1136,7 @@ check_location(png_const_structrp png_ptr, int location)
|
|||||||
|
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_unknown_chunks(png_const_structrp png_ptr,
|
png_set_unknown_chunks(png_const_structrp png_ptr,
|
||||||
png_inforp info_ptr, png_const_unknown_chunkp unknowns, int num_unknowns)
|
png_inforp info_ptr, png_const_unknown_chunkp unknowns, int num_unknowns)
|
||||||
{
|
{
|
||||||
png_unknown_chunkp np;
|
png_unknown_chunkp np;
|
||||||
|
|
||||||
@ -1175,13 +1175,13 @@ png_set_unknown_chunks(png_const_structrp png_ptr,
|
|||||||
* appropriate to read or write.
|
* appropriate to read or write.
|
||||||
*/
|
*/
|
||||||
np = png_voidcast(png_unknown_chunkp, png_realloc_array(png_ptr,
|
np = png_voidcast(png_unknown_chunkp, png_realloc_array(png_ptr,
|
||||||
info_ptr->unknown_chunks, info_ptr->unknown_chunks_num, num_unknowns,
|
info_ptr->unknown_chunks, info_ptr->unknown_chunks_num, num_unknowns,
|
||||||
sizeof *np));
|
sizeof *np));
|
||||||
|
|
||||||
if (np == NULL)
|
if (np == NULL)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "too many unknown chunks",
|
png_chunk_report(png_ptr, "too many unknown chunks",
|
||||||
PNG_CHUNK_WRITE_ERROR);
|
PNG_CHUNK_WRITE_ERROR);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1210,12 +1210,12 @@ png_set_unknown_chunks(png_const_structrp png_ptr,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
np->data = png_voidcast(png_bytep,
|
np->data = png_voidcast(png_bytep,
|
||||||
png_malloc_base(png_ptr, unknowns->size));
|
png_malloc_base(png_ptr, unknowns->size));
|
||||||
|
|
||||||
if (np->data == NULL)
|
if (np->data == NULL)
|
||||||
{
|
{
|
||||||
png_chunk_report(png_ptr, "unknown chunk: out of memory",
|
png_chunk_report(png_ptr, "unknown chunk: out of memory",
|
||||||
PNG_CHUNK_WRITE_ERROR);
|
PNG_CHUNK_WRITE_ERROR);
|
||||||
/* But just skip storing the unknown chunk */
|
/* But just skip storing the unknown chunk */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1422,7 +1422,7 @@ png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
|
|||||||
for (i=0; i<num_chunks; ++i)
|
for (i=0; i<num_chunks; ++i)
|
||||||
{
|
{
|
||||||
old_num_chunks = add_one_chunk(new_list, old_num_chunks,
|
old_num_chunks = add_one_chunk(new_list, old_num_chunks,
|
||||||
chunk_list+5*i, keep);
|
chunk_list+5*i, keep);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now remove any spurious 'default' entries. */
|
/* Now remove any spurious 'default' entries. */
|
||||||
@ -1502,60 +1502,60 @@ png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
|
png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (size == 0 || size > PNG_UINT_31_MAX)
|
if (size == 0 || size > PNG_UINT_31_MAX)
|
||||||
png_error(png_ptr, "invalid compression buffer size");
|
png_error(png_ptr, "invalid compression buffer size");
|
||||||
|
|
||||||
# ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
# ifdef PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
|
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
|
||||||
{
|
{
|
||||||
png_ptr->IDAT_read_size = (png_uint_32)size; /* checked above */
|
png_ptr->IDAT_read_size = (png_uint_32)size; /* checked above */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_SUPPORTED
|
||||||
if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
|
if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
|
||||||
|
{
|
||||||
|
if (png_ptr->zowner != 0)
|
||||||
{
|
{
|
||||||
if (png_ptr->zowner != 0)
|
png_warning(png_ptr,
|
||||||
{
|
"Compression buffer size cannot be changed because it is in use");
|
||||||
png_warning(png_ptr,
|
|
||||||
"Compression buffer size cannot be changed because it is in use");
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __COVERITY__
|
#ifndef __COVERITY__
|
||||||
/* Some compilers complain that this is always false. However, it
|
/* Some compilers complain that this is always false. However, it
|
||||||
* can be true when integer overflow happens.
|
* can be true when integer overflow happens.
|
||||||
*/
|
*/
|
||||||
if (size > ZLIB_IO_MAX)
|
if (size > ZLIB_IO_MAX)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Compression buffer size limited to system maximum");
|
"Compression buffer size limited to system maximum");
|
||||||
size = ZLIB_IO_MAX; /* must fit */
|
size = ZLIB_IO_MAX; /* must fit */
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (size < 6)
|
if (size < 6)
|
||||||
{
|
{
|
||||||
/* Deflate will potentially go into an infinite loop on a SYNC_FLUSH
|
/* Deflate will potentially go into an infinite loop on a SYNC_FLUSH
|
||||||
* if this is permitted.
|
* if this is permitted.
|
||||||
*/
|
*/
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Compression buffer size cannot be reduced below 6");
|
"Compression buffer size cannot be reduced below 6");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (png_ptr->zbuffer_size != size)
|
|
||||||
{
|
|
||||||
png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
|
|
||||||
png_ptr->zbuffer_size = (uInt)size;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (png_ptr->zbuffer_size != size)
|
||||||
|
{
|
||||||
|
png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
|
||||||
|
png_ptr->zbuffer_size = (uInt)size;
|
||||||
|
}
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1662,7 +1662,9 @@ png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
|
|||||||
png_uint_32 /* PRIVATE */
|
png_uint_32 /* PRIVATE */
|
||||||
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
||||||
{
|
{
|
||||||
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
png_const_charp orig_key = key;
|
png_const_charp orig_key = key;
|
||||||
|
#endif
|
||||||
png_uint_32 key_len = 0;
|
png_uint_32 key_len = 0;
|
||||||
int bad_character = 0;
|
int bad_character = 0;
|
||||||
int space = 1;
|
int space = 1;
|
||||||
@ -1725,7 +1727,9 @@ png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
|||||||
|
|
||||||
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
||||||
}
|
}
|
||||||
#endif /* WARNINGS */
|
#else /* !WARNINGS */
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
|
#endif /* !WARNINGS */
|
||||||
|
|
||||||
return key_len;
|
return key_len;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngstruct.h - header file for PNG reference library
|
/* pngstruct.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -249,7 +249,7 @@ struct png_struct_def
|
|||||||
png_byte filter; /* file filter type (always 0) */
|
png_byte filter; /* file filter type (always 0) */
|
||||||
png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
|
||||||
png_byte pass; /* current interlace pass (0 - 6) */
|
png_byte pass; /* current interlace pass (0 - 6) */
|
||||||
png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */
|
png_byte do_filter; /* row filter flags (see PNG_FILTER_ in png.h ) */
|
||||||
png_byte color_type; /* color type of file */
|
png_byte color_type; /* color type of file */
|
||||||
png_byte bit_depth; /* bit depth of file */
|
png_byte bit_depth; /* bit depth of file */
|
||||||
png_byte usr_bit_depth; /* bit depth of users row: write only */
|
png_byte usr_bit_depth; /* bit depth of users row: write only */
|
||||||
|
|||||||
374
pngtest.c
374
pngtest.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngtest.c - a simple test program to test libpng
|
/* pngtest.c - a simple test program to test libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.25 [December 3, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -139,13 +139,13 @@ static char tIME_string[PNG_tIME_STRING_LENGTH] = "tIME chunk is not present";
|
|||||||
static int
|
static int
|
||||||
tIME_to_str(png_structp png_ptr, png_charp ts, png_const_timep t)
|
tIME_to_str(png_structp png_ptr, png_charp ts, png_const_timep t)
|
||||||
{
|
{
|
||||||
png_const_charp str = png_convert_to_rfc1123(png_ptr, t);
|
png_const_charp str = png_convert_to_rfc1123(png_ptr, t);
|
||||||
|
|
||||||
if (str == NULL)
|
if (str == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
strcpy(ts, str);
|
strcpy(ts, str);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif /* older libpng */
|
#endif /* older libpng */
|
||||||
#endif
|
#endif
|
||||||
@ -249,95 +249,95 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
|
|||||||
* png_byte pixel_depth bits per pixel (depth*channels)
|
* png_byte pixel_depth bits per pixel (depth*channels)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Counts the number of zero samples (or zero pixels if color_type is 3 */
|
/* Counts the number of zero samples (or zero pixels if color_type is 3 */
|
||||||
|
|
||||||
if (row_info->color_type == 0 || row_info->color_type == 3)
|
if (row_info->color_type == 0 || row_info->color_type == 3)
|
||||||
{
|
{
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
png_uint_32 n, nstop;
|
png_uint_32 n, nstop;
|
||||||
|
|
||||||
for (n = 0, nstop=row_info->width; n<nstop; n++)
|
for (n = 0, nstop=row_info->width; n<nstop; n++)
|
||||||
{
|
{
|
||||||
if (row_info->bit_depth == 1)
|
if (row_info->bit_depth == 1)
|
||||||
{
|
{
|
||||||
if (((*dp << pos++ ) & 0x80) == 0)
|
if (((*dp << pos++ ) & 0x80) == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
|
|
||||||
if (pos == 8)
|
if (pos == 8)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
dp++;
|
dp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row_info->bit_depth == 2)
|
if (row_info->bit_depth == 2)
|
||||||
{
|
{
|
||||||
if (((*dp << (pos+=2)) & 0xc0) == 0)
|
if (((*dp << (pos+=2)) & 0xc0) == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
|
|
||||||
if (pos == 8)
|
if (pos == 8)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
dp++;
|
dp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row_info->bit_depth == 4)
|
if (row_info->bit_depth == 4)
|
||||||
{
|
{
|
||||||
if (((*dp << (pos+=4)) & 0xf0) == 0)
|
if (((*dp << (pos+=4)) & 0xf0) == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
|
|
||||||
if (pos == 8)
|
if (pos == 8)
|
||||||
{
|
{
|
||||||
pos = 0;
|
pos = 0;
|
||||||
dp++;
|
dp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
if (*dp++ == 0)
|
if (*dp++ == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
|
|
||||||
if (row_info->bit_depth == 16)
|
if (row_info->bit_depth == 16)
|
||||||
{
|
{
|
||||||
if ((*dp | *(dp+1)) == 0)
|
if ((*dp | *(dp+1)) == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
dp+=2;
|
dp+=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* Other color types */
|
else /* Other color types */
|
||||||
{
|
{
|
||||||
png_uint_32 n, nstop;
|
png_uint_32 n, nstop;
|
||||||
int channel;
|
int channel;
|
||||||
int color_channels = row_info->channels;
|
int color_channels = row_info->channels;
|
||||||
if (row_info->color_type > 3)
|
if (row_info->color_type > 3)
|
||||||
color_channels--;
|
color_channels--;
|
||||||
|
|
||||||
for (n = 0, nstop=row_info->width; n<nstop; n++)
|
for (n = 0, nstop=row_info->width; n<nstop; n++)
|
||||||
{
|
{
|
||||||
for (channel = 0; channel < color_channels; channel++)
|
for (channel = 0; channel < color_channels; channel++)
|
||||||
{
|
{
|
||||||
if (row_info->bit_depth == 8)
|
if (row_info->bit_depth == 8)
|
||||||
if (*dp++ == 0)
|
if (*dp++ == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
|
|
||||||
if (row_info->bit_depth == 16)
|
if (row_info->bit_depth == 16)
|
||||||
{
|
{
|
||||||
if ((*dp | *(dp+1)) == 0)
|
if ((*dp | *(dp+1)) == 0)
|
||||||
zero_samples++;
|
zero_samples++;
|
||||||
|
|
||||||
dp+=2;
|
dp+=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (row_info->color_type > 3)
|
if (row_info->color_type > 3)
|
||||||
{
|
{
|
||||||
dp++;
|
dp++;
|
||||||
if (row_info->bit_depth == 16)
|
if (row_info->bit_depth == 16)
|
||||||
dp++;
|
dp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* WRITE_USER_TRANSFORM */
|
#endif /* WRITE_USER_TRANSFORM */
|
||||||
|
|
||||||
@ -354,10 +354,10 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data)
|
|||||||
#ifdef PNG_IO_STATE_SUPPORTED
|
#ifdef PNG_IO_STATE_SUPPORTED
|
||||||
void
|
void
|
||||||
pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
|
pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
|
||||||
png_uint_32 io_op);
|
png_uint_32 io_op);
|
||||||
void
|
void
|
||||||
pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
|
pngtest_check_io_state(png_structp png_ptr, png_size_t data_length,
|
||||||
png_uint_32 io_op)
|
png_uint_32 io_op)
|
||||||
{
|
{
|
||||||
png_uint_32 io_state = png_get_io_state(png_ptr);
|
png_uint_32 io_state = png_get_io_state(png_ptr);
|
||||||
int err = 0;
|
int err = 0;
|
||||||
@ -541,7 +541,7 @@ PNGCBAPI png_debug_malloc(png_structp png_ptr, png_alloc_size_t size)
|
|||||||
memory_infop pinfo;
|
memory_infop pinfo;
|
||||||
png_set_mem_fn(png_ptr, NULL, NULL, NULL);
|
png_set_mem_fn(png_ptr, NULL, NULL, NULL);
|
||||||
pinfo = (memory_infop)png_malloc(png_ptr,
|
pinfo = (memory_infop)png_malloc(png_ptr,
|
||||||
(sizeof *pinfo));
|
(sizeof *pinfo));
|
||||||
pinfo->size = size;
|
pinfo->size = size;
|
||||||
current_allocation += size;
|
current_allocation += size;
|
||||||
total_allocation += size;
|
total_allocation += size;
|
||||||
@ -571,7 +571,7 @@ PNGCBAPI png_debug_malloc(png_structp png_ptr, png_alloc_size_t size)
|
|||||||
|
|
||||||
if (verbose != 0)
|
if (verbose != 0)
|
||||||
printf("png_malloc %lu bytes at %p\n", (unsigned long)size,
|
printf("png_malloc %lu bytes at %p\n", (unsigned long)size,
|
||||||
pinfo->pointer);
|
pinfo->pointer);
|
||||||
|
|
||||||
return (png_voidp)(pinfo->pointer);
|
return (png_voidp)(pinfo->pointer);
|
||||||
}
|
}
|
||||||
@ -778,9 +778,9 @@ write_vpAg_chunk(png_structp write_ptr)
|
|||||||
|
|
||||||
if (verbose != 0)
|
if (verbose != 0)
|
||||||
fprintf(STDERR, " vpAg = %lu x %lu, units = %d\n",
|
fprintf(STDERR, " vpAg = %lu x %lu, units = %d\n",
|
||||||
(unsigned long)user_chunk_data.vpAg_width,
|
(unsigned long)user_chunk_data.vpAg_width,
|
||||||
(unsigned long)user_chunk_data.vpAg_height,
|
(unsigned long)user_chunk_data.vpAg_height,
|
||||||
user_chunk_data.vpAg_units);
|
user_chunk_data.vpAg_units);
|
||||||
|
|
||||||
png_save_uint_32(vpag_chunk_data, user_chunk_data.vpAg_width);
|
png_save_uint_32(vpag_chunk_data, user_chunk_data.vpAg_width);
|
||||||
png_save_uint_32(vpag_chunk_data + 4, user_chunk_data.vpAg_height);
|
png_save_uint_32(vpag_chunk_data + 4, user_chunk_data.vpAg_height);
|
||||||
@ -821,7 +821,7 @@ write_chunks(png_structp write_ptr, int location)
|
|||||||
#ifdef PNG_TEXT_SUPPORTED
|
#ifdef PNG_TEXT_SUPPORTED
|
||||||
static void
|
static void
|
||||||
pngtest_check_text_support(png_structp png_ptr, png_textp text_ptr,
|
pngtest_check_text_support(png_structp png_ptr, png_textp text_ptr,
|
||||||
int num_text)
|
int num_text)
|
||||||
{
|
{
|
||||||
while (num_text > 0)
|
while (num_text > 0)
|
||||||
{
|
{
|
||||||
@ -903,26 +903,26 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
pngtest_debug("Allocating read and write structures");
|
pngtest_debug("Allocating read and write structures");
|
||||||
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
||||||
read_ptr =
|
read_ptr =
|
||||||
png_create_read_struct_2(PNG_LIBPNG_VER_STRING, NULL,
|
png_create_read_struct_2(PNG_LIBPNG_VER_STRING, NULL,
|
||||||
NULL, NULL, NULL, png_debug_malloc, png_debug_free);
|
NULL, NULL, NULL, png_debug_malloc, png_debug_free);
|
||||||
#else
|
#else
|
||||||
read_ptr =
|
read_ptr =
|
||||||
png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
#endif
|
#endif
|
||||||
png_set_error_fn(read_ptr, &error_parameters, pngtest_error,
|
png_set_error_fn(read_ptr, &error_parameters, pngtest_error,
|
||||||
pngtest_warning);
|
pngtest_warning);
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
||||||
write_ptr =
|
write_ptr =
|
||||||
png_create_write_struct_2(PNG_LIBPNG_VER_STRING, NULL,
|
png_create_write_struct_2(PNG_LIBPNG_VER_STRING, NULL,
|
||||||
NULL, NULL, NULL, png_debug_malloc, png_debug_free);
|
NULL, NULL, NULL, png_debug_malloc, png_debug_free);
|
||||||
#else
|
#else
|
||||||
write_ptr =
|
write_ptr =
|
||||||
png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
#endif
|
#endif
|
||||||
png_set_error_fn(write_ptr, &error_parameters, pngtest_error,
|
png_set_error_fn(write_ptr, &error_parameters, pngtest_error,
|
||||||
pngtest_warning);
|
pngtest_warning);
|
||||||
#endif
|
#endif
|
||||||
pngtest_debug("Allocating read_info, write_info and end_info structures");
|
pngtest_debug("Allocating read_info, write_info and end_info structures");
|
||||||
read_info_ptr = png_create_info_struct(read_ptr);
|
read_info_ptr = png_create_info_struct(read_ptr);
|
||||||
@ -935,7 +935,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
|
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
|
||||||
init_callback_info(read_info_ptr);
|
init_callback_info(read_info_ptr);
|
||||||
png_set_read_user_chunk_fn(read_ptr, &user_chunk_data,
|
png_set_read_user_chunk_fn(read_ptr, &user_chunk_data,
|
||||||
read_user_chunk_callback);
|
read_user_chunk_callback);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_SETJMP_SUPPORTED
|
#ifdef PNG_SETJMP_SUPPORTED
|
||||||
@ -1010,9 +1010,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
# ifdef PNG_WRITE_SUPPORTED
|
# ifdef PNG_WRITE_SUPPORTED
|
||||||
png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data,
|
png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data,
|
||||||
# ifdef PNG_WRITE_FLUSH_SUPPORTED
|
# ifdef PNG_WRITE_FLUSH_SUPPORTED
|
||||||
pngtest_flush);
|
pngtest_flush);
|
||||||
# else
|
# else
|
||||||
NULL);
|
NULL);
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -1052,11 +1052,11 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
*/
|
*/
|
||||||
#ifdef PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
png_set_keep_unknown_chunks(read_ptr, PNG_HANDLE_CHUNK_ALWAYS,
|
png_set_keep_unknown_chunks(read_ptr, PNG_HANDLE_CHUNK_ALWAYS,
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS,
|
png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS,
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1080,7 +1080,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
&color_type, &interlace_type, &compression_type, &filter_type) != 0)
|
&color_type, &interlace_type, &compression_type, &filter_type) != 0)
|
||||||
{
|
{
|
||||||
png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,
|
png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,
|
||||||
color_type, interlace_type, compression_type, filter_type);
|
color_type, interlace_type, compression_type, filter_type);
|
||||||
/* num_passes may not be available below if interlace support is not
|
/* num_passes may not be available below if interlace support is not
|
||||||
* provided by libpng for both read and write.
|
* provided by libpng for both read and write.
|
||||||
*/
|
*/
|
||||||
@ -1107,13 +1107,13 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#ifdef PNG_cHRM_SUPPORTED
|
#ifdef PNG_cHRM_SUPPORTED
|
||||||
{
|
{
|
||||||
png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
|
png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
|
||||||
blue_y;
|
blue_y;
|
||||||
|
|
||||||
if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y,
|
if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y,
|
||||||
&red_x, &red_y, &green_x, &green_y, &blue_x, &blue_y) != 0)
|
&red_x, &red_y, &green_x, &green_y, &blue_x, &blue_y) != 0)
|
||||||
{
|
{
|
||||||
png_set_cHRM_fixed(write_ptr, write_info_ptr, white_x, white_y, red_x,
|
png_set_cHRM_fixed(write_ptr, write_info_ptr, white_x, white_y, red_x,
|
||||||
red_y, green_x, green_y, blue_x, blue_y);
|
red_y, green_x, green_y, blue_x, blue_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1130,13 +1130,13 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#ifdef PNG_cHRM_SUPPORTED
|
#ifdef PNG_cHRM_SUPPORTED
|
||||||
{
|
{
|
||||||
double white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
|
double white_x, white_y, red_x, red_y, green_x, green_y, blue_x,
|
||||||
blue_y;
|
blue_y;
|
||||||
|
|
||||||
if (png_get_cHRM(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,
|
if (png_get_cHRM(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,
|
||||||
&red_y, &green_x, &green_y, &blue_x, &blue_y) != 0)
|
&red_y, &green_x, &green_y, &blue_x, &blue_y) != 0)
|
||||||
{
|
{
|
||||||
png_set_cHRM(write_ptr, write_info_ptr, white_x, white_y, red_x,
|
png_set_cHRM(write_ptr, write_info_ptr, white_x, white_y, red_x,
|
||||||
red_y, green_x, green_y, blue_x, blue_y);
|
red_y, green_x, green_y, blue_x, blue_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1158,10 +1158,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
int compression_type;
|
int compression_type;
|
||||||
|
|
||||||
if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,
|
if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,
|
||||||
&profile, &proflen) != 0)
|
&profile, &proflen) != 0)
|
||||||
{
|
{
|
||||||
png_set_iCCP(write_ptr, write_info_ptr, name, compression_type,
|
png_set_iCCP(write_ptr, write_info_ptr, name, compression_type,
|
||||||
profile, proflen);
|
profile, proflen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1218,10 +1218,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
int type, nparams;
|
int type, nparams;
|
||||||
|
|
||||||
if (png_get_pCAL(read_ptr, read_info_ptr, &purpose, &X0, &X1, &type,
|
if (png_get_pCAL(read_ptr, read_info_ptr, &purpose, &X0, &X1, &type,
|
||||||
&nparams, &units, ¶ms) != 0)
|
&nparams, &units, ¶ms) != 0)
|
||||||
{
|
{
|
||||||
png_set_pCAL(write_ptr, write_info_ptr, purpose, X0, X1, type,
|
png_set_pCAL(write_ptr, write_info_ptr, purpose, X0, X1, type,
|
||||||
nparams, units, params);
|
nparams, units, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1251,7 +1251,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
double scal_width, scal_height;
|
double scal_width, scal_height;
|
||||||
|
|
||||||
if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &scal_width,
|
if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &scal_width,
|
||||||
&scal_height) != 0)
|
&scal_height) != 0)
|
||||||
{
|
{
|
||||||
png_set_sCAL(write_ptr, write_info_ptr, unit, scal_width, scal_height);
|
png_set_sCAL(write_ptr, write_info_ptr, unit, scal_width, scal_height);
|
||||||
}
|
}
|
||||||
@ -1263,7 +1263,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
png_charp scal_width, scal_height;
|
png_charp scal_width, scal_height;
|
||||||
|
|
||||||
if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &scal_width,
|
if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &scal_width,
|
||||||
&scal_height) != 0)
|
&scal_height) != 0)
|
||||||
{
|
{
|
||||||
png_set_sCAL_s(write_ptr, write_info_ptr, unit, scal_width,
|
png_set_sCAL_s(write_ptr, write_info_ptr, unit, scal_width,
|
||||||
scal_height);
|
scal_height);
|
||||||
@ -1304,7 +1304,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
for (i=0; i<num_text; i++)
|
for (i=0; i<num_text; i++)
|
||||||
{
|
{
|
||||||
printf(" Text compression[%d]=%d\n",
|
printf(" Text compression[%d]=%d\n",
|
||||||
i, text_ptr[i].compression);
|
i, text_ptr[i].compression);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1341,7 +1341,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
png_color_16p trans_color;
|
png_color_16p trans_color;
|
||||||
|
|
||||||
if (png_get_tRNS(read_ptr, read_info_ptr, &trans_alpha, &num_trans,
|
if (png_get_tRNS(read_ptr, read_info_ptr, &trans_alpha, &num_trans,
|
||||||
&trans_color) != 0)
|
&trans_color) != 0)
|
||||||
{
|
{
|
||||||
int sample_max = (1 << bit_depth);
|
int sample_max = (1 << bit_depth);
|
||||||
/* libpng doesn't reject a tRNS chunk with out-of-range samples */
|
/* libpng doesn't reject a tRNS chunk with out-of-range samples */
|
||||||
@ -1360,12 +1360,12 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
{
|
{
|
||||||
png_unknown_chunkp unknowns;
|
png_unknown_chunkp unknowns;
|
||||||
int num_unknowns = png_get_unknown_chunks(read_ptr, read_info_ptr,
|
int num_unknowns = png_get_unknown_chunks(read_ptr, read_info_ptr,
|
||||||
&unknowns);
|
&unknowns);
|
||||||
|
|
||||||
if (num_unknowns != 0)
|
if (num_unknowns != 0)
|
||||||
{
|
{
|
||||||
png_set_unknown_chunks(write_ptr, write_info_ptr, unknowns,
|
png_set_unknown_chunks(write_ptr, write_info_ptr, unknowns,
|
||||||
num_unknowns);
|
num_unknowns);
|
||||||
#if PNG_LIBPNG_VER < 10600
|
#if PNG_LIBPNG_VER < 10600
|
||||||
/* Copy the locations from the read_info_ptr. The automatically
|
/* Copy the locations from the read_info_ptr. The automatically
|
||||||
* generated locations in write_end_info_ptr are wrong prior to 1.6.0
|
* generated locations in write_end_info_ptr are wrong prior to 1.6.0
|
||||||
@ -1375,7 +1375,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < num_unknowns; i++)
|
for (i = 0; i < num_unknowns; i++)
|
||||||
png_set_unknown_chunk_location(write_ptr, write_info_ptr, i,
|
png_set_unknown_chunk_location(write_ptr, write_info_ptr, i,
|
||||||
unknowns[i].location);
|
unknowns[i].location);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1400,7 +1400,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
#ifdef SINGLE_ROWBUF_ALLOC
|
#ifdef SINGLE_ROWBUF_ALLOC
|
||||||
pngtest_debug("Allocating row buffer...");
|
pngtest_debug("Allocating row buffer...");
|
||||||
row_buf = (png_bytep)png_malloc(read_ptr,
|
row_buf = (png_bytep)png_malloc(read_ptr,
|
||||||
png_get_rowbytes(read_ptr, read_info_ptr));
|
png_get_rowbytes(read_ptr, read_info_ptr));
|
||||||
|
|
||||||
pngtest_debug1("\t0x%08lx", (unsigned long)row_buf);
|
pngtest_debug1("\t0x%08lx", (unsigned long)row_buf);
|
||||||
#endif /* SINGLE_ROWBUF_ALLOC */
|
#endif /* SINGLE_ROWBUF_ALLOC */
|
||||||
@ -1414,10 +1414,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
*/
|
*/
|
||||||
if (png_set_interlace_handling(read_ptr) != num_passes)
|
if (png_set_interlace_handling(read_ptr) != num_passes)
|
||||||
png_error(write_ptr,
|
png_error(write_ptr,
|
||||||
"png_set_interlace_handling(read): wrong pass count ");
|
"png_set_interlace_handling(read): wrong pass count ");
|
||||||
if (png_set_interlace_handling(write_ptr) != num_passes)
|
if (png_set_interlace_handling(write_ptr) != num_passes)
|
||||||
png_error(write_ptr,
|
png_error(write_ptr,
|
||||||
"png_set_interlace_handling(write): wrong pass count ");
|
"png_set_interlace_handling(write): wrong pass count ");
|
||||||
#else /* png_set_interlace_handling not called on either read or write */
|
#else /* png_set_interlace_handling not called on either read or write */
|
||||||
# define calc_pass_height
|
# define calc_pass_height
|
||||||
#endif /* not using libpng interlace handling */
|
#endif /* not using libpng interlace handling */
|
||||||
@ -1454,10 +1454,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
pngtest_debug2("Allocating row buffer (pass %d, y = %u)...", pass, y);
|
pngtest_debug2("Allocating row buffer (pass %d, y = %u)...", pass, y);
|
||||||
|
|
||||||
row_buf = (png_bytep)png_malloc(read_ptr,
|
row_buf = (png_bytep)png_malloc(read_ptr,
|
||||||
png_get_rowbytes(read_ptr, read_info_ptr));
|
png_get_rowbytes(read_ptr, read_info_ptr));
|
||||||
|
|
||||||
pngtest_debug2("\t0x%08lx (%lu bytes)", (unsigned long)row_buf,
|
pngtest_debug2("\t0x%08lx (%lu bytes)", (unsigned long)row_buf,
|
||||||
(unsigned long)png_get_rowbytes(read_ptr, read_info_ptr));
|
(unsigned long)png_get_rowbytes(read_ptr, read_info_ptr));
|
||||||
|
|
||||||
#endif /* !SINGLE_ROWBUF_ALLOC */
|
#endif /* !SINGLE_ROWBUF_ALLOC */
|
||||||
png_read_rows(read_ptr, (png_bytepp)&row_buf, NULL, 1);
|
png_read_rows(read_ptr, (png_bytepp)&row_buf, NULL, 1);
|
||||||
@ -1515,7 +1515,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
for (i=0; i<num_text; i++)
|
for (i=0; i<num_text; i++)
|
||||||
{
|
{
|
||||||
printf(" Text compression[%d]=%d\n",
|
printf(" Text compression[%d]=%d\n",
|
||||||
i, text_ptr[i].compression);
|
i, text_ptr[i].compression);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1549,12 +1549,12 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
{
|
{
|
||||||
png_unknown_chunkp unknowns;
|
png_unknown_chunkp unknowns;
|
||||||
int num_unknowns = png_get_unknown_chunks(read_ptr, end_info_ptr,
|
int num_unknowns = png_get_unknown_chunks(read_ptr, end_info_ptr,
|
||||||
&unknowns);
|
&unknowns);
|
||||||
|
|
||||||
if (num_unknowns != 0)
|
if (num_unknowns != 0)
|
||||||
{
|
{
|
||||||
png_set_unknown_chunks(write_ptr, write_end_info_ptr, unknowns,
|
png_set_unknown_chunks(write_ptr, write_end_info_ptr, unknowns,
|
||||||
num_unknowns);
|
num_unknowns);
|
||||||
#if PNG_LIBPNG_VER < 10600
|
#if PNG_LIBPNG_VER < 10600
|
||||||
/* Copy the locations from the read_info_ptr. The automatically
|
/* Copy the locations from the read_info_ptr. The automatically
|
||||||
* generated locations in write_end_info_ptr are wrong prior to 1.6.0
|
* generated locations in write_end_info_ptr are wrong prior to 1.6.0
|
||||||
@ -1564,7 +1564,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < num_unknowns; i++)
|
for (i = 0; i < num_unknowns; i++)
|
||||||
png_set_unknown_chunk_location(write_ptr, write_end_info_ptr, i,
|
png_set_unknown_chunk_location(write_ptr, write_end_info_ptr, i,
|
||||||
unknowns[i].location);
|
unknowns[i].location);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1598,7 +1598,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
iwidth = png_get_image_width(write_ptr, write_info_ptr);
|
iwidth = png_get_image_width(write_ptr, write_info_ptr);
|
||||||
iheight = png_get_image_height(write_ptr, write_info_ptr);
|
iheight = png_get_image_height(write_ptr, write_info_ptr);
|
||||||
fprintf(STDERR, "\n Image width = %lu, height = %lu\n",
|
fprintf(STDERR, "\n Image width = %lu, height = %lu\n",
|
||||||
(unsigned long)iwidth, (unsigned long)iheight);
|
(unsigned long)iwidth, (unsigned long)iheight);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1631,7 +1631,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
* above, but this is safe.
|
* above, but this is safe.
|
||||||
*/
|
*/
|
||||||
fprintf(STDERR, "\n %s: %d libpng errors found (%d warnings)",
|
fprintf(STDERR, "\n %s: %d libpng errors found (%d warnings)",
|
||||||
inname, error_count, warning_count);
|
inname, error_count, warning_count);
|
||||||
|
|
||||||
if (strict != 0)
|
if (strict != 0)
|
||||||
return (1);
|
return (1);
|
||||||
@ -1642,14 +1642,14 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
else if (unsupported_chunks > 0)
|
else if (unsupported_chunks > 0)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "\n %s: unsupported chunks (%d)%s",
|
fprintf(STDERR, "\n %s: unsupported chunks (%d)%s",
|
||||||
inname, unsupported_chunks, strict ? ": IGNORED --strict!" : "");
|
inname, unsupported_chunks, strict ? ": IGNORED --strict!" : "");
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
else if (warning_count > 0)
|
else if (warning_count > 0)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "\n %s: %d libpng warnings found",
|
fprintf(STDERR, "\n %s: %d libpng warnings found",
|
||||||
inname, warning_count);
|
inname, warning_count);
|
||||||
|
|
||||||
if (strict != 0)
|
if (strict != 0)
|
||||||
return (1);
|
return (1);
|
||||||
@ -1685,18 +1685,19 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
if (num_in != num_out)
|
if (num_in != num_out)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "\nFiles %s and %s are of a different size\n",
|
fprintf(STDERR, "\nFiles %s and %s are of a different size\n",
|
||||||
inname, outname);
|
inname, outname);
|
||||||
|
|
||||||
if (wrote_question == 0 && unsupported_chunks == 0)
|
if (wrote_question == 0 && unsupported_chunks == 0)
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" Was %s written with the same maximum IDAT chunk size (%d bytes),",
|
" Was %s written with the same maximum IDAT"
|
||||||
inname, PNG_ZBUF_SIZE);
|
" chunk size (%d bytes),",
|
||||||
|
inname, PNG_ZBUF_SIZE);
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"\n filtering heuristic (libpng default), compression");
|
"\n filtering heuristic (libpng default), compression");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" level (zlib default),\n and zlib version (%s)?\n\n",
|
" level (zlib default),\n and zlib version (%s)?\n\n",
|
||||||
ZLIB_VERSION);
|
ZLIB_VERSION);
|
||||||
wrote_question = 1;
|
wrote_question = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1716,17 +1717,18 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
if (memcmp(inbuf, outbuf, num_in))
|
if (memcmp(inbuf, outbuf, num_in))
|
||||||
{
|
{
|
||||||
fprintf(STDERR, "\nFiles %s and %s are different\n", inname,
|
fprintf(STDERR, "\nFiles %s and %s are different\n", inname,
|
||||||
outname);
|
outname);
|
||||||
|
|
||||||
if (wrote_question == 0 && unsupported_chunks == 0)
|
if (wrote_question == 0 && unsupported_chunks == 0)
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" Was %s written with the same maximum IDAT chunk size (%d bytes),",
|
" Was %s written with the same maximum"
|
||||||
|
" IDAT chunk size (%d bytes),",
|
||||||
inname, PNG_ZBUF_SIZE);
|
inname, PNG_ZBUF_SIZE);
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"\n filtering heuristic (libpng default), compression");
|
"\n filtering heuristic (libpng default), compression");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" level (zlib default),\n and zlib version (%s)?\n\n",
|
" level (zlib default),\n and zlib version (%s)?\n\n",
|
||||||
ZLIB_VERSION);
|
ZLIB_VERSION);
|
||||||
wrote_question = 1;
|
wrote_question = 1;
|
||||||
}
|
}
|
||||||
@ -1777,12 +1779,12 @@ main(int argc, char *argv[])
|
|||||||
fprintf(STDERR, "%s", png_get_copyright(NULL));
|
fprintf(STDERR, "%s", png_get_copyright(NULL));
|
||||||
/* Show the version of libpng used in building the library */
|
/* Show the version of libpng used in building the library */
|
||||||
fprintf(STDERR, " library (%lu):%s",
|
fprintf(STDERR, " library (%lu):%s",
|
||||||
(unsigned long)png_access_version_number(),
|
(unsigned long)png_access_version_number(),
|
||||||
png_get_header_version(NULL));
|
png_get_header_version(NULL));
|
||||||
|
|
||||||
/* Show the version of libpng used in building the application */
|
/* Show the version of libpng used in building the application */
|
||||||
fprintf(STDERR, " pngtest (%lu):%s", (unsigned long)PNG_LIBPNG_VER,
|
fprintf(STDERR, " pngtest (%lu):%s", (unsigned long)PNG_LIBPNG_VER,
|
||||||
PNG_HEADER_VERSION_STRING);
|
PNG_HEADER_VERSION_STRING);
|
||||||
|
|
||||||
/* Do some consistency checking on the memory allocation settings, I'm
|
/* Do some consistency checking on the memory allocation settings, I'm
|
||||||
* not sure this matters, but it is nice to know, the first of these
|
* not sure this matters, but it is nice to know, the first of these
|
||||||
@ -1800,7 +1802,7 @@ main(int argc, char *argv[])
|
|||||||
if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))
|
if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"Warning: versions are different between png.h and png.c\n");
|
"Warning: versions are different between png.h and png.c\n");
|
||||||
fprintf(STDERR, " png.h version: %s\n", PNG_LIBPNG_VER_STRING);
|
fprintf(STDERR, " png.h version: %s\n", PNG_LIBPNG_VER_STRING);
|
||||||
fprintf(STDERR, " png.c version: %s\n\n", png_libpng_ver);
|
fprintf(STDERR, " png.c version: %s\n\n", png_libpng_ver);
|
||||||
++ierror;
|
++ierror;
|
||||||
@ -1855,19 +1857,19 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (multiple == 0 && argc == 3 + verbose)
|
if (multiple == 0 && argc == 3 + verbose)
|
||||||
outname = argv[2 + verbose];
|
outname = argv[2 + verbose];
|
||||||
|
|
||||||
if ((multiple == 0 && argc > 3 + verbose) ||
|
if ((multiple == 0 && argc > 3 + verbose) ||
|
||||||
(multiple != 0 && argc < 2))
|
(multiple != 0 && argc < 2))
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
"usage: %s [infile.png] [outfile.png]\n\t%s -m {infile.png}\n",
|
"usage: %s [infile.png] [outfile.png]\n\t%s -m {infile.png}\n",
|
||||||
argv[0], argv[0]);
|
argv[0], argv[0]);
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" reads/writes one PNG file (without -m) or multiple files (-m)\n");
|
" reads/writes one PNG file (without -m) or multiple files (-m)\n");
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" with -m %s is used as a temporary file\n", outname);
|
" with -m %s is used as a temporary file\n", outname);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (multiple != 0)
|
if (multiple != 0)
|
||||||
@ -1888,7 +1890,7 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
fprintf(STDERR, "\n PASS (%lu zero samples)\n",
|
fprintf(STDERR, "\n PASS (%lu zero samples)\n",
|
||||||
(unsigned long)zero_samples);
|
(unsigned long)zero_samples);
|
||||||
#else
|
#else
|
||||||
fprintf(STDERR, " PASS\n");
|
fprintf(STDERR, " PASS\n");
|
||||||
#endif
|
#endif
|
||||||
@ -1908,20 +1910,20 @@ main(int argc, char *argv[])
|
|||||||
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
||||||
if (allocation_now != current_allocation)
|
if (allocation_now != current_allocation)
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
||||||
current_allocation - allocation_now);
|
current_allocation - allocation_now);
|
||||||
|
|
||||||
if (current_allocation != 0)
|
if (current_allocation != 0)
|
||||||
{
|
{
|
||||||
memory_infop pinfo = pinformation;
|
memory_infop pinfo = pinformation;
|
||||||
|
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
||||||
current_allocation);
|
current_allocation);
|
||||||
|
|
||||||
while (pinfo != NULL)
|
while (pinfo != NULL)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, " %lu bytes at %p\n",
|
fprintf(STDERR, " %lu bytes at %p\n",
|
||||||
(unsigned long)pinfo->size,
|
(unsigned long)pinfo->size,
|
||||||
pinfo->pointer);
|
pinfo->pointer);
|
||||||
pinfo = pinfo->next;
|
pinfo = pinfo->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1929,13 +1931,13 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
||||||
fprintf(STDERR, " Current memory allocation: %10d bytes\n",
|
fprintf(STDERR, " Current memory allocation: %10d bytes\n",
|
||||||
current_allocation);
|
current_allocation);
|
||||||
fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",
|
fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",
|
||||||
maximum_allocation);
|
maximum_allocation);
|
||||||
fprintf(STDERR, " Total memory allocation: %10d bytes\n",
|
fprintf(STDERR, " Total memory allocation: %10d bytes\n",
|
||||||
total_allocation);
|
total_allocation);
|
||||||
fprintf(STDERR, " Number of allocations: %10d\n",
|
fprintf(STDERR, " Number of allocations: %10d\n",
|
||||||
num_allocations);
|
num_allocations);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1970,7 +1972,7 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
fprintf(STDERR, "\n PASS (%lu zero samples)\n",
|
fprintf(STDERR, "\n PASS (%lu zero samples)\n",
|
||||||
(unsigned long)zero_samples);
|
(unsigned long)zero_samples);
|
||||||
#else
|
#else
|
||||||
fprintf(STDERR, " PASS\n");
|
fprintf(STDERR, " PASS\n");
|
||||||
#endif
|
#endif
|
||||||
@ -1997,19 +1999,19 @@ main(int argc, char *argv[])
|
|||||||
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
||||||
if (allocation_now != current_allocation)
|
if (allocation_now != current_allocation)
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",
|
||||||
current_allocation - allocation_now);
|
current_allocation - allocation_now);
|
||||||
|
|
||||||
if (current_allocation != 0)
|
if (current_allocation != 0)
|
||||||
{
|
{
|
||||||
memory_infop pinfo = pinformation;
|
memory_infop pinfo = pinformation;
|
||||||
|
|
||||||
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",
|
||||||
current_allocation);
|
current_allocation);
|
||||||
|
|
||||||
while (pinfo != NULL)
|
while (pinfo != NULL)
|
||||||
{
|
{
|
||||||
fprintf(STDERR, " %lu bytes at %p\n",
|
fprintf(STDERR, " %lu bytes at %p\n",
|
||||||
(unsigned long)pinfo->size, pinfo->pointer);
|
(unsigned long)pinfo->size, pinfo->pointer);
|
||||||
pinfo = pinfo->next;
|
pinfo = pinfo->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2017,13 +2019,13 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
#if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG
|
||||||
fprintf(STDERR, " Current memory allocation: %10d bytes\n",
|
fprintf(STDERR, " Current memory allocation: %10d bytes\n",
|
||||||
current_allocation);
|
current_allocation);
|
||||||
fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",
|
fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",
|
||||||
maximum_allocation);
|
maximum_allocation);
|
||||||
fprintf(STDERR, " Total memory allocation: %10d bytes\n",
|
fprintf(STDERR, " Total memory allocation: %10d bytes\n",
|
||||||
total_allocation);
|
total_allocation);
|
||||||
fprintf(STDERR, " Number of allocations: %10d\n",
|
fprintf(STDERR, " Number of allocations: %10d\n",
|
||||||
num_allocations);
|
num_allocations);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2032,13 +2034,13 @@ main(int argc, char *argv[])
|
|||||||
t_misc += (t_stop - t_start);
|
t_misc += (t_stop - t_start);
|
||||||
t_start = t_stop;
|
t_start = t_stop;
|
||||||
fprintf(STDERR, " CPU time used = %.3f seconds",
|
fprintf(STDERR, " CPU time used = %.3f seconds",
|
||||||
(t_misc+t_decode+t_encode)/(float)CLOCKS_PER_SEC);
|
(t_misc+t_decode+t_encode)/(float)CLOCKS_PER_SEC);
|
||||||
fprintf(STDERR, " (decoding %.3f,\n",
|
fprintf(STDERR, " (decoding %.3f,\n",
|
||||||
t_decode/(float)CLOCKS_PER_SEC);
|
t_decode/(float)CLOCKS_PER_SEC);
|
||||||
fprintf(STDERR, " encoding %.3f ,",
|
fprintf(STDERR, " encoding %.3f ,",
|
||||||
t_encode/(float)CLOCKS_PER_SEC);
|
t_encode/(float)CLOCKS_PER_SEC);
|
||||||
fprintf(STDERR, " other %.3f seconds)\n\n",
|
fprintf(STDERR, " other %.3f seconds)\n\n",
|
||||||
t_misc/(float)CLOCKS_PER_SEC);
|
t_misc/(float)CLOCKS_PER_SEC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ierror == 0)
|
if (ierror == 0)
|
||||||
@ -2050,19 +2052,19 @@ main(int argc, char *argv[])
|
|||||||
dummy_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
dummy_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||||
fprintf(STDERR, " Default limits:\n");
|
fprintf(STDERR, " Default limits:\n");
|
||||||
fprintf(STDERR, " width_max = %lu\n",
|
fprintf(STDERR, " width_max = %lu\n",
|
||||||
(unsigned long) png_get_user_width_max(dummy_ptr));
|
(unsigned long) png_get_user_width_max(dummy_ptr));
|
||||||
fprintf(STDERR, " height_max = %lu\n",
|
fprintf(STDERR, " height_max = %lu\n",
|
||||||
(unsigned long) png_get_user_height_max(dummy_ptr));
|
(unsigned long) png_get_user_height_max(dummy_ptr));
|
||||||
if (png_get_chunk_cache_max(dummy_ptr) == 0)
|
if (png_get_chunk_cache_max(dummy_ptr) == 0)
|
||||||
fprintf(STDERR, " cache_max = unlimited\n");
|
fprintf(STDERR, " cache_max = unlimited\n");
|
||||||
else
|
else
|
||||||
fprintf(STDERR, " cache_max = %lu\n",
|
fprintf(STDERR, " cache_max = %lu\n",
|
||||||
(unsigned long) png_get_chunk_cache_max(dummy_ptr));
|
(unsigned long) png_get_chunk_cache_max(dummy_ptr));
|
||||||
if (png_get_chunk_malloc_max(dummy_ptr) == 0)
|
if (png_get_chunk_malloc_max(dummy_ptr) == 0)
|
||||||
fprintf(STDERR, " malloc_max = unlimited\n");
|
fprintf(STDERR, " malloc_max = unlimited\n");
|
||||||
else
|
else
|
||||||
fprintf(STDERR, " malloc_max = %lu\n",
|
fprintf(STDERR, " malloc_max = %lu\n",
|
||||||
(unsigned long) png_get_chunk_malloc_max(dummy_ptr));
|
(unsigned long) png_get_chunk_malloc_max(dummy_ptr));
|
||||||
png_destroy_read_struct(&dummy_ptr, NULL, NULL);
|
png_destroy_read_struct(&dummy_ptr, NULL, NULL);
|
||||||
|
|
||||||
return (int)(ierror != 0);
|
return (int)(ierror != 0);
|
||||||
@ -2072,11 +2074,11 @@ int
|
|||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" test ignored because libpng was not built with read support\n");
|
" test ignored because libpng was not built with read support\n");
|
||||||
/* And skip this test */
|
/* And skip this test */
|
||||||
return SKIP;
|
return SKIP;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef png_libpng_version_1_6_23 Your_png_h_is_not_version_1_6_23;
|
typedef png_libpng_version_1_6_24 Your_png_h_is_not_version_1_6_24;
|
||||||
|
|||||||
11
pngtrans.c
11
pngtrans.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -172,13 +172,14 @@ png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
|
|||||||
* size!
|
* size!
|
||||||
*/
|
*/
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"png_set_filler is invalid for low bit depth gray output");
|
"png_set_filler is invalid for"
|
||||||
|
" low bit depth gray output");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"png_set_filler: inappropriate color type");
|
"png_set_filler: inappropriate color type");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
@ -797,7 +798,7 @@ png_set_user_transform_info(png_structrp png_ptr, png_voidp
|
|||||||
(png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
|
(png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
|
||||||
{
|
{
|
||||||
png_app_error(png_ptr,
|
png_app_error(png_ptr,
|
||||||
"info change after png_start_read_image or png_read_update_info");
|
"info change after png_start_read_image or png_read_update_info");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
6
pngwio.c
6
pngwio.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwio.c - functions for data output
|
/* pngwio.c - functions for data output
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.15 [November 20, 2014]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014,2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -35,7 +35,7 @@ png_write_data(png_structrp png_ptr, png_const_bytep data, png_size_t length)
|
|||||||
/* NOTE: write_data_fn must not change the buffer! */
|
/* NOTE: write_data_fn must not change the buffer! */
|
||||||
if (png_ptr->write_data_fn != NULL )
|
if (png_ptr->write_data_fn != NULL )
|
||||||
(*(png_ptr->write_data_fn))(png_ptr, png_constcast(png_bytep,data),
|
(*(png_ptr->write_data_fn))(png_ptr, png_constcast(png_bytep,data),
|
||||||
length);
|
length);
|
||||||
|
|
||||||
else
|
else
|
||||||
png_error(png_ptr, "Call to NULL write function");
|
png_error(png_ptr, "Call to NULL write function");
|
||||||
|
|||||||
96
pngwrite.c
96
pngwrite.c
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.19 [November 12, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -22,7 +22,7 @@
|
|||||||
/* Write out all the unknown chunks for the current given location */
|
/* Write out all the unknown chunks for the current given location */
|
||||||
static void
|
static void
|
||||||
write_unknown_chunks(png_structrp png_ptr, png_const_inforp info_ptr,
|
write_unknown_chunks(png_structrp png_ptr, png_const_inforp info_ptr,
|
||||||
unsigned int where)
|
unsigned int where)
|
||||||
{
|
{
|
||||||
if (info_ptr->unknown_chunks_num != 0)
|
if (info_ptr->unknown_chunks_num != 0)
|
||||||
{
|
{
|
||||||
@ -148,11 +148,11 @@ png_write_info_before_PLTE(png_structrp png_ptr, png_const_inforp info_ptr)
|
|||||||
# ifdef PNG_WRITE_sRGB_SUPPORTED
|
# ifdef PNG_WRITE_sRGB_SUPPORTED
|
||||||
if ((info_ptr->valid & PNG_INFO_sRGB) != 0)
|
if ((info_ptr->valid & PNG_INFO_sRGB) != 0)
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"profile matches sRGB but writing iCCP instead");
|
"profile matches sRGB but writing iCCP instead");
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
png_write_iCCP(png_ptr, info_ptr->iccp_name,
|
png_write_iCCP(png_ptr, info_ptr->iccp_name,
|
||||||
info_ptr->iccp_profile);
|
info_ptr->iccp_profile);
|
||||||
}
|
}
|
||||||
# ifdef PNG_WRITE_sRGB_SUPPORTED
|
# ifdef PNG_WRITE_sRGB_SUPPORTED
|
||||||
else
|
else
|
||||||
@ -383,7 +383,7 @@ png_write_end(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
for (i = 0; i < info_ptr->num_text; i++)
|
for (i = 0; i < info_ptr->num_text; i++)
|
||||||
{
|
{
|
||||||
png_debug2(2, "Writing trailer text chunk %d, type %d", i,
|
png_debug2(2, "Writing trailer text chunk %d, type %d", i,
|
||||||
info_ptr->text[i].compression);
|
info_ptr->text[i].compression);
|
||||||
/* An internationalized chunk? */
|
/* An internationalized chunk? */
|
||||||
if (info_ptr->text[i].compression > 0)
|
if (info_ptr->text[i].compression > 0)
|
||||||
{
|
{
|
||||||
@ -693,7 +693,7 @@ png_write_row(png_structrp png_ptr, png_const_bytep row)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
png_debug2(1, "in png_write_row (row %u, pass %d)",
|
png_debug2(1, "in png_write_row (row %u, pass %d)",
|
||||||
png_ptr->row_number, png_ptr->pass);
|
png_ptr->row_number, png_ptr->pass);
|
||||||
|
|
||||||
/* Initialize transformations and other stuff if first time */
|
/* Initialize transformations and other stuff if first time */
|
||||||
if (png_ptr->row_number == 0 && png_ptr->pass == 0)
|
if (png_ptr->row_number == 0 && png_ptr->pass == 0)
|
||||||
@ -1069,7 +1069,7 @@ png_set_filter(png_structrp png_ptr, int method, int filters)
|
|||||||
* is not available so the filter can't be used. Just warn here.
|
* is not available so the filter can't be used. Just warn here.
|
||||||
*/
|
*/
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"png_set_filter: UP/AVG/PAETH cannot be added after start");
|
"png_set_filter: UP/AVG/PAETH cannot be added after start");
|
||||||
filters &= ~(PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH);
|
filters &= ~(PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1095,13 +1095,13 @@ png_set_filter(png_structrp png_ptr, int method, int filters)
|
|||||||
|
|
||||||
if (png_ptr->try_row == NULL)
|
if (png_ptr->try_row == NULL)
|
||||||
png_ptr->try_row = png_voidcast(png_bytep,
|
png_ptr->try_row = png_voidcast(png_bytep,
|
||||||
png_malloc(png_ptr, buf_size));
|
png_malloc(png_ptr, buf_size));
|
||||||
|
|
||||||
if (num_filters > 1)
|
if (num_filters > 1)
|
||||||
{
|
{
|
||||||
if (png_ptr->tst_row == NULL)
|
if (png_ptr->tst_row == NULL)
|
||||||
png_ptr->tst_row = png_voidcast(png_bytep,
|
png_ptr->tst_row = png_voidcast(png_bytep,
|
||||||
png_malloc(png_ptr, buf_size));
|
png_malloc(png_ptr, buf_size));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
png_ptr->do_filter = (png_byte)filters;
|
png_ptr->do_filter = (png_byte)filters;
|
||||||
@ -1628,7 +1628,7 @@ png_write_image_16bit(png_voidp argument)
|
|||||||
|
|
||||||
static png_byte
|
static png_byte
|
||||||
png_unpremultiply(png_uint_32 component, png_uint_32 alpha,
|
png_unpremultiply(png_uint_32 component, png_uint_32 alpha,
|
||||||
png_uint_32 reciprocal/*from the above macro*/)
|
png_uint_32 reciprocal/*from the above macro*/)
|
||||||
{
|
{
|
||||||
/* The following gives 1.0 for an alpha of 0, which is fine, otherwise if 0/0
|
/* The following gives 1.0 for an alpha of 0, which is fine, otherwise if 0/0
|
||||||
* is represented as some other value there is more likely to be a
|
* is represented as some other value there is more likely to be a
|
||||||
@ -1848,16 +1848,16 @@ png_image_set_PLTE(png_image_write_control *display)
|
|||||||
if (channels >= 3) /* RGB */
|
if (channels >= 3) /* RGB */
|
||||||
{
|
{
|
||||||
palette[i].blue = png_unpremultiply(entry[afirst + (2 ^ bgr)],
|
palette[i].blue = png_unpremultiply(entry[afirst + (2 ^ bgr)],
|
||||||
alpha, reciprocal);
|
alpha, reciprocal);
|
||||||
palette[i].green = png_unpremultiply(entry[afirst + 1], alpha,
|
palette[i].green = png_unpremultiply(entry[afirst + 1], alpha,
|
||||||
reciprocal);
|
reciprocal);
|
||||||
palette[i].red = png_unpremultiply(entry[afirst + bgr], alpha,
|
palette[i].red = png_unpremultiply(entry[afirst + bgr], alpha,
|
||||||
reciprocal);
|
reciprocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* gray */
|
else /* gray */
|
||||||
palette[i].blue = palette[i].red = palette[i].green =
|
palette[i].blue = palette[i].red = palette[i].green =
|
||||||
png_unpremultiply(entry[afirst], alpha, reciprocal);
|
png_unpremultiply(entry[afirst], alpha, reciprocal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1904,11 +1904,11 @@ png_image_set_PLTE(png_image_write_control *display)
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
png_set_PLTE(image->opaque->png_ptr, image->opaque->info_ptr, palette,
|
png_set_PLTE(image->opaque->png_ptr, image->opaque->info_ptr, palette,
|
||||||
entries);
|
entries);
|
||||||
|
|
||||||
if (num_trans > 0)
|
if (num_trans > 0)
|
||||||
png_set_tRNS(image->opaque->png_ptr, image->opaque->info_ptr, tRNS,
|
png_set_tRNS(image->opaque->png_ptr, image->opaque->info_ptr, tRNS,
|
||||||
num_trans, NULL);
|
num_trans, NULL);
|
||||||
|
|
||||||
image->colormap_entries = entries;
|
image->colormap_entries = entries;
|
||||||
}
|
}
|
||||||
@ -1917,7 +1917,7 @@ static int
|
|||||||
png_image_write_main(png_voidp argument)
|
png_image_write_main(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
||||||
argument);
|
argument);
|
||||||
png_imagep image = display->image;
|
png_imagep image = display->image;
|
||||||
png_structrp png_ptr = image->opaque->png_ptr;
|
png_structrp png_ptr = image->opaque->png_ptr;
|
||||||
png_inforp info_ptr = image->opaque->info_ptr;
|
png_inforp info_ptr = image->opaque->info_ptr;
|
||||||
@ -1980,24 +1980,24 @@ png_image_write_main(png_voidp argument)
|
|||||||
png_uint_32 entries = image->colormap_entries;
|
png_uint_32 entries = image->colormap_entries;
|
||||||
|
|
||||||
png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
|
png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
|
||||||
entries > 16 ? 8 : (entries > 4 ? 4 : (entries > 2 ? 2 : 1)),
|
entries > 16 ? 8 : (entries > 4 ? 4 : (entries > 2 ? 2 : 1)),
|
||||||
PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
|
PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
|
||||||
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||||
|
|
||||||
png_image_set_PLTE(display);
|
png_image_set_PLTE(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
png_error(image->opaque->png_ptr,
|
png_error(image->opaque->png_ptr,
|
||||||
"no color-map for color-mapped image");
|
"no color-map for color-mapped image");
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
|
png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
|
||||||
write_16bit ? 16 : 8,
|
write_16bit ? 16 : 8,
|
||||||
((format & PNG_FORMAT_FLAG_COLOR) ? PNG_COLOR_MASK_COLOR : 0) +
|
((format & PNG_FORMAT_FLAG_COLOR) ? PNG_COLOR_MASK_COLOR : 0) +
|
||||||
((format & PNG_FORMAT_FLAG_ALPHA) ? PNG_COLOR_MASK_ALPHA : 0),
|
((format & PNG_FORMAT_FLAG_ALPHA) ? PNG_COLOR_MASK_ALPHA : 0),
|
||||||
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||||
|
|
||||||
/* Counter-intuitively the data transformations must be called *after*
|
/* Counter-intuitively the data transformations must be called *after*
|
||||||
* png_write_info, not before as in the read code, but the 'set' functions
|
* png_write_info, not before as in the read code, but the 'set' functions
|
||||||
@ -2012,11 +2012,11 @@ png_image_write_main(png_voidp argument)
|
|||||||
|
|
||||||
if ((image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB) == 0)
|
if ((image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB) == 0)
|
||||||
png_set_cHRM_fixed(png_ptr, info_ptr,
|
png_set_cHRM_fixed(png_ptr, info_ptr,
|
||||||
/* color x y */
|
/* color x y */
|
||||||
/* white */ 31270, 32900,
|
/* white */ 31270, 32900,
|
||||||
/* red */ 64000, 33000,
|
/* red */ 64000, 33000,
|
||||||
/* green */ 30000, 60000,
|
/* green */ 30000, 60000,
|
||||||
/* blue */ 15000, 6000
|
/* blue */ 15000, 6000
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2110,7 +2110,7 @@ png_image_write_main(png_voidp argument)
|
|||||||
(colormap == 0 && display->convert_to_8bit != 0))
|
(colormap == 0 && display->convert_to_8bit != 0))
|
||||||
{
|
{
|
||||||
png_bytep row = png_voidcast(png_bytep, png_malloc(png_ptr,
|
png_bytep row = png_voidcast(png_bytep, png_malloc(png_ptr,
|
||||||
png_get_rowbytes(png_ptr, info_ptr)));
|
png_get_rowbytes(png_ptr, info_ptr)));
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
display->local_row = row;
|
display->local_row = row;
|
||||||
@ -2150,10 +2150,10 @@ png_image_write_main(png_voidp argument)
|
|||||||
|
|
||||||
static void (PNGCBAPI
|
static void (PNGCBAPI
|
||||||
image_memory_write)(png_structp png_ptr, png_bytep/*const*/ data,
|
image_memory_write)(png_structp png_ptr, png_bytep/*const*/ data,
|
||||||
png_size_t size)
|
png_size_t size)
|
||||||
{
|
{
|
||||||
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
||||||
png_ptr->io_ptr/*backdoor: png_get_io_ptr(png_ptr)*/);
|
png_ptr->io_ptr/*backdoor: png_get_io_ptr(png_ptr)*/);
|
||||||
const png_alloc_size_t ob = display->output_bytes;
|
const png_alloc_size_t ob = display->output_bytes;
|
||||||
|
|
||||||
/* Check for overflow; this should never happen: */
|
/* Check for overflow; this should never happen: */
|
||||||
@ -2184,22 +2184,22 @@ static int
|
|||||||
png_image_write_memory(png_voidp argument)
|
png_image_write_memory(png_voidp argument)
|
||||||
{
|
{
|
||||||
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
png_image_write_control *display = png_voidcast(png_image_write_control*,
|
||||||
argument);
|
argument);
|
||||||
|
|
||||||
/* The rest of the memory-specific init and write_main in an error protected
|
/* The rest of the memory-specific init and write_main in an error protected
|
||||||
* environment. This case needs to use callbacks for the write operations
|
* environment. This case needs to use callbacks for the write operations
|
||||||
* since libpng has no built in support for writing to memory.
|
* since libpng has no built in support for writing to memory.
|
||||||
*/
|
*/
|
||||||
png_set_write_fn(display->image->opaque->png_ptr, display/*io_ptr*/,
|
png_set_write_fn(display->image->opaque->png_ptr, display/*io_ptr*/,
|
||||||
image_memory_write, image_memory_flush);
|
image_memory_write, image_memory_flush);
|
||||||
|
|
||||||
return png_image_write_main(display);
|
return png_image_write_main(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
int PNGAPI
|
int PNGAPI
|
||||||
png_image_write_to_memory(png_imagep image, void *memory,
|
png_image_write_to_memory(png_imagep image, void *memory,
|
||||||
png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8bit,
|
png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8bit,
|
||||||
const void *buffer, png_int_32 row_stride, const void *colormap)
|
const void *buffer, png_int_32 row_stride, const void *colormap)
|
||||||
{
|
{
|
||||||
/* Write the image to the given buffer, or count the bytes if it is NULL */
|
/* Write the image to the given buffer, or count the bytes if it is NULL */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
@ -2251,12 +2251,12 @@ png_image_write_to_memory(png_imagep image, void *memory,
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_write_to_memory: invalid argument");
|
"png_image_write_to_memory: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_write_to_memory: incorrect PNG_IMAGE_VERSION");
|
"png_image_write_to_memory: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
@ -2265,7 +2265,7 @@ png_image_write_to_memory(png_imagep image, void *memory,
|
|||||||
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
|
||||||
int PNGAPI
|
int PNGAPI
|
||||||
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
||||||
const void *buffer, png_int_32 row_stride, const void *colormap)
|
const void *buffer, png_int_32 row_stride, const void *colormap)
|
||||||
{
|
{
|
||||||
/* Write the image to the given (FILE*). */
|
/* Write the image to the given (FILE*). */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
@ -2301,12 +2301,12 @@ png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_write_to_stdio: invalid argument");
|
"png_image_write_to_stdio: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_write_to_stdio: incorrect PNG_IMAGE_VERSION");
|
"png_image_write_to_stdio: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
@ -2314,8 +2314,8 @@ png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
|
|||||||
|
|
||||||
int PNGAPI
|
int PNGAPI
|
||||||
png_image_write_to_file(png_imagep image, const char *file_name,
|
png_image_write_to_file(png_imagep image, const char *file_name,
|
||||||
int convert_to_8bit, const void *buffer, png_int_32 row_stride,
|
int convert_to_8bit, const void *buffer, png_int_32 row_stride,
|
||||||
const void *colormap)
|
const void *colormap)
|
||||||
{
|
{
|
||||||
/* Write the image to the named file. */
|
/* Write the image to the named file. */
|
||||||
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
if (image != NULL && image->version == PNG_IMAGE_VERSION)
|
||||||
@ -2327,7 +2327,7 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
|||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
{
|
{
|
||||||
if (png_image_write_to_stdio(image, fp, convert_to_8bit, buffer,
|
if (png_image_write_to_stdio(image, fp, convert_to_8bit, buffer,
|
||||||
row_stride, colormap) != 0)
|
row_stride, colormap) != 0)
|
||||||
{
|
{
|
||||||
int error; /* from fflush/fclose */
|
int error; /* from fflush/fclose */
|
||||||
|
|
||||||
@ -2368,12 +2368,12 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
|||||||
|
|
||||||
else
|
else
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_write_to_file: invalid argument");
|
"png_image_write_to_file: invalid argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (image != NULL)
|
else if (image != NULL)
|
||||||
return png_image_error(image,
|
return png_image_error(image,
|
||||||
"png_image_write_to_file: incorrect PNG_IMAGE_VERSION");
|
"png_image_write_to_file: incorrect PNG_IMAGE_VERSION");
|
||||||
|
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.18 [July 23, 2015]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@ -525,7 +525,7 @@ png_do_write_transformations(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
#ifdef PNG_WRITE_FILLER_SUPPORTED
|
#ifdef PNG_WRITE_FILLER_SUPPORTED
|
||||||
if ((png_ptr->transformations & PNG_FILLER) != 0)
|
if ((png_ptr->transformations & PNG_FILLER) != 0)
|
||||||
png_do_strip_channel(row_info, png_ptr->row_buf + 1,
|
png_do_strip_channel(row_info, png_ptr->row_buf + 1,
|
||||||
!(png_ptr->flags & PNG_FLAG_FILLER_AFTER));
|
!(png_ptr->flags & PNG_FLAG_FILLER_AFTER));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
||||||
@ -549,7 +549,7 @@ png_do_write_transformations(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
#ifdef PNG_WRITE_SHIFT_SUPPORTED
|
#ifdef PNG_WRITE_SHIFT_SUPPORTED
|
||||||
if ((png_ptr->transformations & PNG_SHIFT) != 0)
|
if ((png_ptr->transformations & PNG_SHIFT) != 0)
|
||||||
png_do_shift(row_info, png_ptr->row_buf + 1,
|
png_do_shift(row_info, png_ptr->row_buf + 1,
|
||||||
&(png_ptr->shift));
|
&(png_ptr->shift));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
||||||
|
|||||||
214
pngwutil.c
214
pngwutil.c
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.22 [May 26, 2016]
|
* Last changed in libpng 1.6.24 [August 4, 2016]
|
||||||
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@ -59,7 +59,7 @@ png_write_sig(png_structrp png_ptr)
|
|||||||
|
|
||||||
/* Write the rest of the 8 byte signature */
|
/* Write the rest of the 8 byte signature */
|
||||||
png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes],
|
png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes],
|
||||||
(png_size_t)(8 - png_ptr->sig_bytes));
|
(png_size_t)(8 - png_ptr->sig_bytes));
|
||||||
|
|
||||||
if (png_ptr->sig_bytes < 3)
|
if (png_ptr->sig_bytes < 3)
|
||||||
png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
|
png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
|
||||||
@ -174,7 +174,7 @@ png_write_chunk_end(png_structrp png_ptr)
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
|
png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
|
||||||
png_const_bytep data, png_size_t length)
|
png_const_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
@ -191,10 +191,10 @@ png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
|
|||||||
/* This is the API that calls the internal function above. */
|
/* This is the API that calls the internal function above. */
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_write_chunk(png_structrp png_ptr, png_const_bytep chunk_string,
|
png_write_chunk(png_structrp png_ptr, png_const_bytep chunk_string,
|
||||||
png_const_bytep data, png_size_t length)
|
png_const_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
png_write_complete_chunk(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), data,
|
png_write_complete_chunk(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), data,
|
||||||
length);
|
length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is used below to find the size of an image to pass to png_deflate_claim,
|
/* This is used below to find the size of an image to pass to png_deflate_claim,
|
||||||
@ -291,7 +291,7 @@ optimize_cmf(png_bytep data, png_alloc_size_t data_size)
|
|||||||
/* Initialize the compressor for the appropriate type of compression. */
|
/* Initialize the compressor for the appropriate type of compression. */
|
||||||
static int
|
static int
|
||||||
png_deflate_claim(png_structrp png_ptr, png_uint_32 owner,
|
png_deflate_claim(png_structrp png_ptr, png_uint_32 owner,
|
||||||
png_alloc_size_t data_size)
|
png_alloc_size_t data_size)
|
||||||
{
|
{
|
||||||
if (png_ptr->zowner != 0)
|
if (png_ptr->zowner != 0)
|
||||||
{
|
{
|
||||||
@ -416,7 +416,7 @@ png_deflate_claim(png_structrp png_ptr, png_uint_32 owner,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = deflateInit2(&png_ptr->zstream, level, method, windowBits,
|
ret = deflateInit2(&png_ptr->zstream, level, method, windowBits,
|
||||||
memLevel, strategy);
|
memLevel, strategy);
|
||||||
|
|
||||||
if (ret == Z_OK)
|
if (ret == Z_OK)
|
||||||
png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
|
png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
|
||||||
@ -477,7 +477,7 @@ typedef struct
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
png_text_compress_init(compression_state *comp, png_const_bytep input,
|
png_text_compress_init(compression_state *comp, png_const_bytep input,
|
||||||
png_alloc_size_t input_len)
|
png_alloc_size_t input_len)
|
||||||
{
|
{
|
||||||
comp->input = input;
|
comp->input = input;
|
||||||
comp->input_len = input_len;
|
comp->input_len = input_len;
|
||||||
@ -487,7 +487,7 @@ png_text_compress_init(compression_state *comp, png_const_bytep input,
|
|||||||
/* Compress the data in the compression state input */
|
/* Compress the data in the compression state input */
|
||||||
static int
|
static int
|
||||||
png_text_compress(png_structrp png_ptr, png_uint_32 chunk_name,
|
png_text_compress(png_structrp png_ptr, png_uint_32 chunk_name,
|
||||||
compression_state *comp, png_uint_32 prefix_len)
|
compression_state *comp, png_uint_32 prefix_len)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -579,7 +579,7 @@ png_text_compress(png_structrp png_ptr, png_uint_32 chunk_name,
|
|||||||
|
|
||||||
/* Compress the data */
|
/* Compress the data */
|
||||||
ret = deflate(&png_ptr->zstream,
|
ret = deflate(&png_ptr->zstream,
|
||||||
input_len > 0 ? Z_NO_FLUSH : Z_FINISH);
|
input_len > 0 ? Z_NO_FLUSH : Z_FINISH);
|
||||||
|
|
||||||
/* Claw back input data that was not consumed (because avail_in is
|
/* Claw back input data that was not consumed (because avail_in is
|
||||||
* reset above every time round the loop).
|
* reset above every time round the loop).
|
||||||
@ -925,7 +925,7 @@ png_write_PLTE(png_structrp png_ptr, png_const_colorp palette,
|
|||||||
*/
|
*/
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_compress_IDAT(png_structrp png_ptr, png_const_bytep input,
|
png_compress_IDAT(png_structrp png_ptr, png_const_bytep input,
|
||||||
png_alloc_size_t input_len, int flush)
|
png_alloc_size_t input_len, int flush)
|
||||||
{
|
{
|
||||||
if (png_ptr->zowner != png_IDAT)
|
if (png_ptr->zowner != png_IDAT)
|
||||||
{
|
{
|
||||||
@ -937,7 +937,7 @@ png_compress_IDAT(png_structrp png_ptr, png_const_bytep input,
|
|||||||
if (png_ptr->zbuffer_list == NULL)
|
if (png_ptr->zbuffer_list == NULL)
|
||||||
{
|
{
|
||||||
png_ptr->zbuffer_list = png_voidcast(png_compression_bufferp,
|
png_ptr->zbuffer_list = png_voidcast(png_compression_bufferp,
|
||||||
png_malloc(png_ptr, PNG_COMPRESSION_BUFFER_SIZE(png_ptr)));
|
png_malloc(png_ptr, PNG_COMPRESSION_BUFFER_SIZE(png_ptr)));
|
||||||
png_ptr->zbuffer_list->next = NULL;
|
png_ptr->zbuffer_list->next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1358,7 +1358,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
|
|||||||
|
|
||||||
/* Write the chunk out as it is */
|
/* Write the chunk out as it is */
|
||||||
png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha,
|
png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha,
|
||||||
(png_size_t)num_trans);
|
(png_size_t)num_trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (color_type == PNG_COLOR_TYPE_GRAY)
|
else if (color_type == PNG_COLOR_TYPE_GRAY)
|
||||||
@ -1389,7 +1389,7 @@ png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8");
|
"Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1441,7 +1441,8 @@ png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
png_warning(png_ptr,
|
png_warning(png_ptr,
|
||||||
"Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8");
|
"Ignoring attempt to write 16-bit bKGD chunk "
|
||||||
|
"when bit_depth is 8");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1571,7 +1572,7 @@ png_write_zTXt(png_structrp png_ptr, png_const_charp key, png_const_charp text,
|
|||||||
|
|
||||||
/* Compute the compressed data; do it now for the length */
|
/* Compute the compressed data; do it now for the length */
|
||||||
png_text_compress_init(&comp, (png_const_bytep)text,
|
png_text_compress_init(&comp, (png_const_bytep)text,
|
||||||
text == NULL ? 0 : strlen(text));
|
text == NULL ? 0 : strlen(text));
|
||||||
|
|
||||||
if (png_text_compress(png_ptr, png_zTXt, &comp, key_len) != Z_OK)
|
if (png_text_compress(png_ptr, png_zTXt, &comp, key_len) != Z_OK)
|
||||||
png_error(png_ptr, png_ptr->zstream.msg);
|
png_error(png_ptr, png_ptr->zstream.msg);
|
||||||
@ -1941,7 +1942,7 @@ png_write_start_row(png_structrp png_ptr)
|
|||||||
*/
|
*/
|
||||||
if ((filters & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH)) != 0)
|
if ((filters & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH)) != 0)
|
||||||
png_ptr->prev_row = png_voidcast(png_bytep,
|
png_ptr->prev_row = png_voidcast(png_bytep,
|
||||||
png_calloc(png_ptr, buf_size));
|
png_calloc(png_ptr, buf_size));
|
||||||
#endif /* WRITE_FILTER */
|
#endif /* WRITE_FILTER */
|
||||||
|
|
||||||
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
@ -2244,7 +2245,7 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
|
|||||||
*/
|
*/
|
||||||
static void /* PRIVATE */
|
static void /* PRIVATE */
|
||||||
png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
|
png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
|
||||||
png_size_t row_bytes);
|
png_size_t row_bytes);
|
||||||
|
|
||||||
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
@ -2262,14 +2263,22 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
i++, rp++, dp++)
|
i++, rp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = *rp;
|
v = *dp = *rp;
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
||||||
i++, rp++, lp++, dp++)
|
i++, rp++, lp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@ -2278,6 +2287,28 @@ png_setup_sub_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_sub_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, lp;
|
||||||
|
png_size_t i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_SUB;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1; i < bpp;
|
||||||
|
i++, rp++, dp++)
|
||||||
|
{
|
||||||
|
*dp = *rp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lp = png_ptr->row_buf + 1; i < row_bytes;
|
||||||
|
i++, rp++, lp++, dp++)
|
||||||
|
{
|
||||||
|
*dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
||||||
const png_size_t lmins)
|
const png_size_t lmins)
|
||||||
@ -2294,7 +2325,11 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
|||||||
i++, rp++, pp++, dp++)
|
i++, rp++, pp++, dp++)
|
||||||
{
|
{
|
||||||
v = *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
v = *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@ -2302,10 +2337,25 @@ png_setup_up_row(png_structrp png_ptr, const png_size_t row_bytes,
|
|||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_up_row_only(png_structrp png_ptr, const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, pp;
|
||||||
|
png_size_t i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_UP;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
|
pp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
|
i++, rp++, pp++, dp++)
|
||||||
|
{
|
||||||
|
*dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
const png_size_t row_bytes, const png_size_t lmins)
|
const png_size_t row_bytes, const png_size_t lmins)
|
||||||
{
|
{
|
||||||
png_bytep rp, dp, pp, lp;
|
png_bytep rp, dp, pp, lp;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
@ -2315,11 +2365,15 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
png_ptr->try_row[0] = PNG_FILTER_VALUE_AVG;
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_AVG;
|
||||||
|
|
||||||
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
||||||
{
|
{
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
||||||
@ -2327,7 +2381,11 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
v = *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
||||||
& 0xff);
|
& 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@ -2335,6 +2393,27 @@ png_setup_avg_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_avg_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, pp, lp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_AVG;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
|
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
||||||
|
{
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lp = png_ptr->row_buf + 1; i < row_bytes; i++)
|
||||||
|
{
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
|
||||||
|
& 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static png_size_t /* PRIVATE */
|
static png_size_t /* PRIVATE */
|
||||||
png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
@ -2352,7 +2431,11 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
{
|
{
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
@ -2381,7 +2464,11 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
|
|
||||||
v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sum > lmins) /* We are already worse, don't continue. */
|
if (sum > lmins) /* We are already worse, don't continue. */
|
||||||
break;
|
break;
|
||||||
@ -2389,6 +2476,48 @@ png_setup_paeth_row(png_structrp png_ptr, const png_uint_32 bpp,
|
|||||||
|
|
||||||
return (sum);
|
return (sum);
|
||||||
}
|
}
|
||||||
|
static void /* PRIVATE */
|
||||||
|
png_setup_paeth_row_only(png_structrp png_ptr, const png_uint_32 bpp,
|
||||||
|
const png_size_t row_bytes)
|
||||||
|
{
|
||||||
|
png_bytep rp, dp, pp, cp, lp;
|
||||||
|
png_size_t i;
|
||||||
|
|
||||||
|
png_ptr->try_row[0] = PNG_FILTER_VALUE_PAETH;
|
||||||
|
|
||||||
|
for (i = 0, rp = png_ptr->row_buf + 1, dp = png_ptr->try_row + 1,
|
||||||
|
pp = png_ptr->prev_row + 1; i < bpp; i++)
|
||||||
|
{
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (lp = png_ptr->row_buf + 1, cp = png_ptr->prev_row + 1; i < row_bytes;
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
int a, b, c, pa, pb, pc, p;
|
||||||
|
|
||||||
|
b = *pp++;
|
||||||
|
c = *cp++;
|
||||||
|
a = *lp++;
|
||||||
|
|
||||||
|
p = b - c;
|
||||||
|
pc = a - c;
|
||||||
|
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
pa = abs(p);
|
||||||
|
pb = abs(pc);
|
||||||
|
pc = abs(p + pc);
|
||||||
|
#else
|
||||||
|
pa = p < 0 ? -p : p;
|
||||||
|
pb = pc < 0 ? -pc : pc;
|
||||||
|
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
|
||||||
|
|
||||||
|
*dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /* WRITE_FILTER */
|
#endif /* WRITE_FILTER */
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
@ -2397,7 +2526,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
#ifndef PNG_WRITE_FILTER_SUPPORTED
|
#ifndef PNG_WRITE_FILTER_SUPPORTED
|
||||||
png_write_filtered_row(png_ptr, png_ptr->row_buf, row_info->rowbytes+1);
|
png_write_filtered_row(png_ptr, png_ptr->row_buf, row_info->rowbytes+1);
|
||||||
#else
|
#else
|
||||||
png_byte filter_to_do = png_ptr->do_filter;
|
unsigned int filter_to_do = png_ptr->do_filter;
|
||||||
png_bytep row_buf;
|
png_bytep row_buf;
|
||||||
png_bytep best_row;
|
png_bytep best_row;
|
||||||
png_uint_32 bpp;
|
png_uint_32 bpp;
|
||||||
@ -2443,32 +2572,33 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
*/
|
*/
|
||||||
best_row = png_ptr->row_buf;
|
best_row = png_ptr->row_buf;
|
||||||
|
|
||||||
|
if (PNG_SIZE_MAX/128 <= row_bytes)
|
||||||
if ((filter_to_do & PNG_FILTER_NONE) != 0 && filter_to_do != PNG_FILTER_NONE)
|
|
||||||
{
|
{
|
||||||
|
/* Overflow can occur in the calculation, just select the lowest set
|
||||||
|
* filter.
|
||||||
|
*/
|
||||||
|
filter_to_do &= 0U-filter_to_do;
|
||||||
|
}
|
||||||
|
else if ((filter_to_do & PNG_FILTER_NONE) != 0 &&
|
||||||
|
filter_to_do != PNG_FILTER_NONE)
|
||||||
|
{
|
||||||
|
/* Overflow not possible and multiple filters in the list, including the
|
||||||
|
* 'none' filter.
|
||||||
|
*/
|
||||||
png_bytep rp;
|
png_bytep rp;
|
||||||
png_size_t sum = 0;
|
png_size_t sum = 0;
|
||||||
png_size_t i;
|
png_size_t i;
|
||||||
int v;
|
int v;
|
||||||
|
|
||||||
if (PNG_SIZE_MAX/128 <= row_bytes)
|
|
||||||
{
|
|
||||||
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
|
||||||
{
|
|
||||||
/* Check for overflow */
|
|
||||||
if (sum > PNG_SIZE_MAX/128 - 256)
|
|
||||||
break;
|
|
||||||
|
|
||||||
v = *rp;
|
|
||||||
sum += (v < 128) ? v : 256 - v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* Overflow is not possible */
|
|
||||||
{
|
{
|
||||||
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
|
||||||
{
|
{
|
||||||
v = *rp;
|
v = *rp;
|
||||||
|
#ifdef PNG_USE_ABS
|
||||||
|
sum += 128 - abs(v - 128);
|
||||||
|
#else
|
||||||
sum += (v < 128) ? v : 256 - v;
|
sum += (v < 128) ? v : 256 - v;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2479,7 +2609,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
if (filter_to_do == PNG_FILTER_SUB)
|
if (filter_to_do == PNG_FILTER_SUB)
|
||||||
/* It's the only filter so no testing is needed */
|
/* It's the only filter so no testing is needed */
|
||||||
{
|
{
|
||||||
(void) png_setup_sub_row(png_ptr, bpp, row_bytes, mins);
|
png_setup_sub_row_only(png_ptr, bpp, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2505,7 +2635,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
/* Up filter */
|
/* Up filter */
|
||||||
if (filter_to_do == PNG_FILTER_UP)
|
if (filter_to_do == PNG_FILTER_UP)
|
||||||
{
|
{
|
||||||
(void) png_setup_up_row(png_ptr, row_bytes, mins);
|
png_setup_up_row_only(png_ptr, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2531,7 +2661,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
/* Avg filter */
|
/* Avg filter */
|
||||||
if (filter_to_do == PNG_FILTER_AVG)
|
if (filter_to_do == PNG_FILTER_AVG)
|
||||||
{
|
{
|
||||||
(void) png_setup_avg_row(png_ptr, bpp, row_bytes, mins);
|
png_setup_avg_row_only(png_ptr, bpp, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2555,9 +2685,9 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Paeth filter */
|
/* Paeth filter */
|
||||||
if ((filter_to_do == PNG_FILTER_PAETH) != 0)
|
if (filter_to_do == PNG_FILTER_PAETH)
|
||||||
{
|
{
|
||||||
(void) png_setup_paeth_row(png_ptr, bpp, row_bytes, mins);
|
png_setup_paeth_row_only(png_ptr, bpp, row_bytes);
|
||||||
best_row = png_ptr->try_row;
|
best_row = png_ptr->try_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2589,7 +2719,7 @@ png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
/* Do the actual writing of a previously filtered row. */
|
/* Do the actual writing of a previously filtered row. */
|
||||||
static void
|
static void
|
||||||
png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
|
png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
|
||||||
png_size_t full_row_length/*includes filter byte*/)
|
png_size_t full_row_length/*includes filter byte*/)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_write_filtered_row");
|
png_debug(1, "in png_write_filtered_row");
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
VisualStudio instructions
|
VisualStudio instructions
|
||||||
|
|
||||||
libpng version 1.6.23 - June 9, 2016
|
libpng version 1.6.24 - August 4, 2016
|
||||||
|
|
||||||
Copyright (c) 2010,2013,2015 Glenn Randers-Pehrson
|
Copyright (c) 2010,2013,2015 Glenn Randers-Pehrson
|
||||||
|
|
||||||
@ -93,3 +93,5 @@ as follows:
|
|||||||
DLL /MD /MDd
|
DLL /MD /MDd
|
||||||
Static Library /MD /MDd
|
Static Library /MD /MDd
|
||||||
|
|
||||||
|
Also, be sure to build libpng, zlib, and your project all for the same
|
||||||
|
platform (e.g., 32-bit or 64-bit).
|
||||||
|
|||||||
@ -84,7 +84,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
@ -97,9 +97,9 @@
|
|||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -114,7 +114,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
@ -128,9 +128,9 @@
|
|||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
@ -140,7 +140,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
@ -153,9 +153,9 @@
|
|||||||
<CompileAs>CompileAsC</CompileAs>
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
@ -170,7 +170,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
@ -184,9 +184,9 @@
|
|||||||
<CompileAs>CompileAsC</CompileAs>
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
|||||||
@ -76,16 +76,16 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -109,7 +109,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
@ -117,9 +117,9 @@
|
|||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -141,7 +141,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -149,9 +149,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
@ -176,7 +176,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -185,9 +185,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
|||||||
@ -76,16 +76,16 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -109,7 +109,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
@ -117,9 +117,9 @@
|
|||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -141,7 +141,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -149,9 +149,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
@ -176,7 +176,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -185,9 +185,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
|||||||
@ -76,16 +76,16 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -109,7 +109,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
@ -117,9 +117,9 @@
|
|||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -141,7 +141,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -149,9 +149,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
@ -176,7 +176,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -185,9 +185,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
|||||||
@ -76,16 +76,16 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -109,7 +109,7 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
@ -117,9 +117,9 @@
|
|||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
@ -141,7 +141,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -149,9 +149,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PNG_USE_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
@ -176,7 +176,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
@ -185,9 +185,9 @@
|
|||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(ZLibSrcDir);..\..\..\scripts;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<DisableSpecificWarnings>4996;4127</DisableSpecificWarnings>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<CompileAsManaged>false</CompileAsManaged>
|
<CompileAsManaged>false</CompileAsManaged>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<!--
|
<!--
|
||||||
* zlib.props - location of zlib source
|
* zlib.props - location of zlib source
|
||||||
*
|
*
|
||||||
* libpng version 1.6.23 - June 9, 2016
|
* libpng version 1.6.24 - August 4, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
@ -41,5 +41,18 @@
|
|||||||
test it:
|
test it:
|
||||||
-->
|
-->
|
||||||
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
|
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
|
||||||
|
|
||||||
|
<!-- The following lines provide a global (solution level) control of the
|
||||||
|
warnings issued by the compiler, these are used in the individual
|
||||||
|
project files (*/*.vcxproj) with, for zlib, some extra disables.
|
||||||
|
|
||||||
|
Different versions of Visual Studio may require different settings,
|
||||||
|
these settings work with Visual Studio 2013. Just set
|
||||||
|
TreatWarningAsError to false to check the build without failing on
|
||||||
|
errors.
|
||||||
|
-->
|
||||||
|
<WarningLevel>EnableAllWarnings</WarningLevel>
|
||||||
|
<TreatWarningAsError>true</TreatWarningAsError>
|
||||||
|
<DisableSpecificWarnings>4255;4668;4710;4711;4746;4820;4996</DisableSpecificWarnings>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -88,11 +88,13 @@
|
|||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<DisableSpecificWarnings>$(DisableSpecificWarnings);4127;4131;4242;4244</DisableSpecificWarnings>
|
||||||
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
@ -103,11 +105,13 @@
|
|||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<WarningLevel>TurnOffAllWarnings</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<DisableSpecificWarnings>$(DisableSpecificWarnings);4127;4131;4242;4244</DisableSpecificWarnings>
|
||||||
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
@ -118,7 +122,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
@ -126,7 +130,8 @@
|
|||||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings);4127;4131;4242;4244</DisableSpecificWarnings>
|
||||||
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -141,7 +146,7 @@
|
|||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>$(WarningLevel)</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
@ -149,7 +154,8 @@
|
|||||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
<BrowseInformation>true</BrowseInformation>
|
<BrowseInformation>true</BrowseInformation>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<TreatWarningAsError>true</TreatWarningAsError>
|
<DisableSpecificWarnings>$(DisableSpecificWarnings);4127;4131;4242;4244</DisableSpecificWarnings>
|
||||||
|
<TreatWarningAsError>$(TreatWarningAsError)</TreatWarningAsError>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;Z_SOLO;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
Makefiles for libpng version 1.6.23 - June 9, 2016
|
Makefiles for libpng version 1.6.24 - August 4, 2016
|
||||||
|
|
||||||
pnglibconf.h.prebuilt => Stores configuration settings
|
pnglibconf.h.prebuilt => Stores configuration settings
|
||||||
makefile.linux => Linux/ELF makefile
|
makefile.linux => Linux/ELF makefile
|
||||||
(gcc, creates libpng16.so.16.1.6.23)
|
(gcc, creates libpng16.so.16.1.6.24)
|
||||||
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||||
makefile.knr => Archaic UNIX Makefile that converts files with
|
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||||
ansi2knr (Requires ansi2knr.c from
|
ansi2knr (Requires ansi2knr.c from
|
||||||
@ -33,12 +33,12 @@ pnglibconf.h.prebuilt => Stores configuration settings
|
|||||||
makefile.os2 => OS/2 Makefile (gcc and emx, requires libpng.def)
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires libpng.def)
|
||||||
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||||
makefile.sggcc => Silicon Graphics (gcc,
|
makefile.sggcc => Silicon Graphics (gcc,
|
||||||
creates libpng16.so.16.1.6.23)
|
creates libpng16.so.16.1.6.24)
|
||||||
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
|
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
|
||||||
makefile.solaris => Solaris 2.X makefile (gcc,
|
makefile.solaris => Solaris 2.X makefile (gcc,
|
||||||
creates libpng16.so.16.1.6.23)
|
creates libpng16.so.16.1.6.24)
|
||||||
makefile.so9 => Solaris 9 makefile (gcc,
|
makefile.so9 => Solaris 9 makefile (gcc,
|
||||||
creates libpng16.so.16.1.6.23)
|
creates libpng16.so.16.1.6.24)
|
||||||
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||||
makefile.sunos => Sun makefile
|
makefile.sunos => Sun makefile
|
||||||
makefile.32sunu => Sun Ultra 32-bit makefile
|
makefile.32sunu => Sun Ultra 32-bit makefile
|
||||||
|
|||||||
@ -21,7 +21,7 @@ PNG_DFN "OS2 DESCRIPTION "PNG image compression library""
|
|||||||
PNG_DFN "OS2 CODE PRELOAD MOVEABLE DISCARDABLE"
|
PNG_DFN "OS2 CODE PRELOAD MOVEABLE DISCARDABLE"
|
||||||
PNG_DFN ""
|
PNG_DFN ""
|
||||||
PNG_DFN "EXPORTS"
|
PNG_DFN "EXPORTS"
|
||||||
PNG_DFN ";Version 1.6.23"
|
PNG_DFN ";Version 1.6.24"
|
||||||
|
|
||||||
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
||||||
PNG_DFN "@" SYMBOL_PREFIX "@@" name "@"
|
PNG_DFN "@" SYMBOL_PREFIX "@@" name "@"
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
# Modeled after libxml-config.
|
# Modeled after libxml-config.
|
||||||
|
|
||||||
version=1.6.23
|
version=1.6.24
|
||||||
prefix=""
|
prefix=""
|
||||||
libdir=""
|
libdir=""
|
||||||
libs=""
|
libs=""
|
||||||
|
|||||||
@ -5,6 +5,6 @@ includedir=@includedir@/libpng16
|
|||||||
|
|
||||||
Name: libpng
|
Name: libpng
|
||||||
Description: Loads and saves PNG files
|
Description: Loads and saves PNG files
|
||||||
Version: 1.6.23
|
Version: 1.6.24
|
||||||
Libs: -L${libdir} -lpng16
|
Libs: -L${libdir} -lpng16
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
VERMAJ = 1
|
VERMAJ = 1
|
||||||
VERMIN = 6
|
VERMIN = 6
|
||||||
VERMIC = 23
|
VERMIC = 24
|
||||||
VER = $(VERMAJ).$(VERMIN).$(VERMIC)
|
VER = $(VERMAJ).$(VERMIN).$(VERMIC)
|
||||||
NAME = libpng
|
NAME = libpng
|
||||||
PACKAGE = $(NAME)-$(VER)
|
PACKAGE = $(NAME)-$(VER)
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
# Library name:
|
# Library name:
|
||||||
LIBNAME = libpng16
|
LIBNAME = libpng16
|
||||||
PNGMAJ = 16
|
PNGMAJ = 16
|
||||||
RELEASE = 23
|
RELEASE = 24
|
||||||
|
|
||||||
# Shared library names:
|
# Shared library names:
|
||||||
LIBSO=$(LIBNAME).so
|
LIBSO=$(LIBNAME).so
|
||||||
|
|||||||
@ -18,7 +18,7 @@ exec_prefix=$(prefix)
|
|||||||
# Library name:
|
# Library name:
|
||||||
LIBNAME = libpng16
|
LIBNAME = libpng16
|
||||||
PNGMAJ = 16
|
PNGMAJ = 16
|
||||||
RELEASE = 23
|
RELEASE = 24
|
||||||
|
|
||||||
# Shared library names:
|
# Shared library names:
|
||||||
LIBSO=$(LIBNAME).dll
|
LIBSO=$(LIBNAME).dll
|
||||||
|
|||||||
@ -17,7 +17,7 @@ INCSDIR=${LOCALBASE}/include/libpng16
|
|||||||
|
|
||||||
LIB= png16
|
LIB= png16
|
||||||
SHLIB_MAJOR= 0
|
SHLIB_MAJOR= 0
|
||||||
SHLIB_MINOR= 1.6.23
|
SHLIB_MINOR= 1.6.24
|
||||||
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
||||||
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
||||||
pngwtran.c pngmem.c pngerror.c pngpread.c
|
pngwtran.c pngmem.c pngerror.c pngpread.c
|
||||||
|
|||||||
@ -17,7 +17,7 @@ INCSDIR=${LOCALBASE}/include
|
|||||||
|
|
||||||
LIB= png
|
LIB= png
|
||||||
SHLIB_MAJOR= 16
|
SHLIB_MAJOR= 16
|
||||||
SHLIB_MINOR= 1.6.23
|
SHLIB_MINOR= 1.6.24
|
||||||
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
||||||
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
||||||
pngwtran.c pngmem.c pngerror.c pngpread.c
|
pngwtran.c pngmem.c pngerror.c pngpread.c
|
||||||
|
|||||||
@ -11,7 +11,7 @@ LIBDIR= ${PREFIX}/lib
|
|||||||
MANDIR= ${PREFIX}/man/cat
|
MANDIR= ${PREFIX}/man/cat
|
||||||
|
|
||||||
SHLIB_MAJOR= 16
|
SHLIB_MAJOR= 16
|
||||||
SHLIB_MINOR= 1.6.23
|
SHLIB_MINOR= 1.6.24
|
||||||
|
|
||||||
LIB= png
|
LIB= png
|
||||||
SRCS= png.c pngerror.c pngget.c pngmem.c pngpread.c \
|
SRCS= png.c pngerror.c pngget.c pngmem.c pngpread.c \
|
||||||
|
|||||||
@ -552,6 +552,7 @@ option WRITE_ANCILLARY_CHUNKS requires WRITE
|
|||||||
|
|
||||||
# These options disable *all* the text chunks if turned off
|
# These options disable *all* the text chunks if turned off
|
||||||
|
|
||||||
|
option TEXT disabled
|
||||||
option READ_TEXT requires READ_ANCILLARY_CHUNKS enables TEXT
|
option READ_TEXT requires READ_ANCILLARY_CHUNKS enables TEXT
|
||||||
option WRITE_TEXT requires WRITE_ANCILLARY_CHUNKS enables TEXT
|
option WRITE_TEXT requires WRITE_ANCILLARY_CHUNKS enables TEXT
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
/* libpng 1.6.23 STANDARD API DEFINITION */
|
/* libpng 1.6.24 STANDARD API DEFINITION */
|
||||||
|
|
||||||
/* pnglibconf.h - library build configuration */
|
/* pnglibconf.h - library build configuration */
|
||||||
|
|
||||||
/* Libpng version 1.6.23 - June 9, 2016 */
|
/* Libpng version 1.6.24 - August 4, 2016 */
|
||||||
|
|
||||||
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
;Version 1.6.23
|
;Version 1.6.24
|
||||||
;--------------------------------------------------------------
|
;--------------------------------------------------------------
|
||||||
; LIBPNG symbol list as a Win32 DEF file
|
; LIBPNG symbol list as a Win32 DEF file
|
||||||
; Contains all the symbols that can be exported from libpng
|
; Contains all the symbols that can be exported from libpng
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user