Merge pull request #747 from julienmalik/update_libpng
update libpng to from 1.6.17 to 1.6.21
This commit is contained in:
commit
f5446fdcfb
|
@ -10,21 +10,18 @@ this sentence.
|
||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.2.6, August 15, 2004, through 1.6.17, March 26, 2015, are
|
libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, are
|
||||||
Copyright (c) 2004, 2006-2015 Glenn Randers-Pehrson, and are
|
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
|
||||||
distributed according to the same disclaimer and license as libpng-1.2.5
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
with the following individual added to the list of Contributing Authors
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
|
added to the list of Contributing Authors:
|
||||||
Cosmin Truta
|
|
||||||
|
|
||||||
libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
|
|
||||||
Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
|
|
||||||
distributed according to the same disclaimer and license as libpng-1.0.6
|
|
||||||
with the following individuals added to the list of Contributing Authors
|
|
||||||
|
|
||||||
Simon-Pierre Cadieux
|
Simon-Pierre Cadieux
|
||||||
Eric S. Raymond
|
Eric S. Raymond
|
||||||
|
Mans Rullgard
|
||||||
|
Cosmin Truta
|
||||||
Gilles Vollant
|
Gilles Vollant
|
||||||
|
James Yu
|
||||||
|
|
||||||
and with the following additions to the disclaimer:
|
and with the following additions to the disclaimer:
|
||||||
|
|
||||||
|
@ -36,18 +33,20 @@ and with the following additions to the disclaimer:
|
||||||
the user.
|
the user.
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
|
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
distributed according to the same disclaimer and license as libpng-0.96,
|
libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
with the following individuals added to the list of Contributing Authors:
|
license as libpng-0.96, with the following individuals added to the list
|
||||||
|
of Contributing Authors:
|
||||||
|
|
||||||
Tom Lane
|
Tom Lane
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
Willem van Schaik
|
Willem van Schaik
|
||||||
|
|
||||||
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||||
Copyright (c) 1996, 1997 Andreas Dilger
|
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||||
Distributed according to the same disclaimer and license as libpng-0.88,
|
and are distributed according to the same disclaimer and license as
|
||||||
with the following individuals added to the list of Contributing Authors:
|
libpng-0.88, with the following individuals added to the list of
|
||||||
|
Contributing Authors:
|
||||||
|
|
||||||
John Bowler
|
John Bowler
|
||||||
Kevin Bracey
|
Kevin Bracey
|
||||||
|
@ -57,7 +56,7 @@ with the following individuals added to the list of Contributing Authors:
|
||||||
Tom Tanner
|
Tom Tanner
|
||||||
|
|
||||||
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
For the purposes of this copyright and license, "Contributing Authors"
|
For the purposes of this copyright and license, "Contributing Authors"
|
||||||
is defined as the following set of individuals:
|
is defined as the following set of individuals:
|
||||||
|
@ -80,12 +79,12 @@ Permission is hereby granted to use, copy, modify, and distribute this
|
||||||
source code, or portions hereof, for any purpose, without fee, subject
|
source code, or portions hereof, for any purpose, without fee, subject
|
||||||
to the following restrictions:
|
to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this source code must not be misrepresented.
|
1. The origin of this source code must not be misrepresented.
|
||||||
|
|
||||||
2. Altered versions must be plainly marked as such and must not
|
2. Altered versions must be plainly marked as such and must not
|
||||||
be misrepresented as being the original source.
|
be misrepresented as being the original source.
|
||||||
|
|
||||||
3. This Copyright notice may not be removed or altered from any
|
3. This Copyright notice may not be removed or altered from any
|
||||||
source or altered source distribution.
|
source or altered source distribution.
|
||||||
|
|
||||||
The Contributing Authors and Group 42, Inc. specifically permit, without
|
The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||||
|
@ -94,18 +93,20 @@ supporting the PNG file format in commercial products. If you use this
|
||||||
source code in a product, acknowledgment is not required but would be
|
source code in a product, acknowledgment is not required but would be
|
||||||
appreciated.
|
appreciated.
|
||||||
|
|
||||||
|
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
|
|
||||||
A "png_get_copyright" function is available, for convenient use in "about"
|
A "png_get_copyright" function is available, for convenient use in "about"
|
||||||
boxes and the like:
|
boxes and the like:
|
||||||
|
|
||||||
printf("%s",png_get_copyright(NULL));
|
printf("%s", png_get_copyright(NULL));
|
||||||
|
|
||||||
Also, the PNG logo (in PNG format, of course) is supplied in the
|
Also, the PNG logo (in PNG format, of course) is supplied in the
|
||||||
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||||
|
|
||||||
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
|
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
certification mark of the Open Source Initiative.
|
a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
|
the additional disclaimers inserted at version 1.0.7.
|
||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
March 26, 2015
|
January 15, 2016
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||||
* Copyright (c) 1998-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_17 Your_png_h_is_not_version_1_6_17;
|
typedef png_libpng_version_1_6_21 Your_png_h_is_not_version_1_6_21;
|
||||||
|
|
||||||
/* 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
|
||||||
|
@ -26,15 +26,20 @@ typedef png_libpng_version_1_6_17 Your_png_h_is_not_version_1_6_17;
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
|
png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
|
||||||
{
|
{
|
||||||
|
unsigned int nb = (unsigned int)num_bytes;
|
||||||
|
|
||||||
png_debug(1, "in png_set_sig_bytes");
|
png_debug(1, "in png_set_sig_bytes");
|
||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (num_bytes > 8)
|
if (num_bytes < 0)
|
||||||
|
nb = 0;
|
||||||
|
|
||||||
|
if (nb > 8)
|
||||||
png_error(png_ptr, "Too many bytes for PNG signature");
|
png_error(png_ptr, "Too many bytes for PNG signature");
|
||||||
|
|
||||||
png_ptr->sig_bytes = (png_byte)((num_bytes < 0 ? 0 : num_bytes) & 0xff);
|
png_ptr->sig_bytes = (png_byte)nb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Checks whether the supplied bytes match the PNG signature. We allow
|
/* Checks whether the supplied bytes match the PNG signature. We allow
|
||||||
|
@ -101,7 +106,7 @@ png_zfree(voidpf png_ptr, voidpf ptr)
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_reset_crc(png_structrp png_ptr)
|
png_reset_crc(png_structrp png_ptr)
|
||||||
{
|
{
|
||||||
/* The cast is safe because the crc is a 32 bit value. */
|
/* The cast is safe because the crc is a 32-bit value. */
|
||||||
png_ptr->crc = (png_uint_32)crc32(0, Z_NULL, 0);
|
png_ptr->crc = (png_uint_32)crc32(0, Z_NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +134,7 @@ png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, png_size_t length)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'uLong' is defined in zlib.h as unsigned long; this means that on some
|
/* 'uLong' is defined in zlib.h as unsigned long; this means that on some
|
||||||
* systems it is a 64 bit value. crc32, however, returns 32 bits so the
|
* systems it is a 64-bit value. crc32, however, returns 32 bits so the
|
||||||
* following cast is safe. 'uInt' may be no more than 16 bits, so it is
|
* following cast is safe. 'uInt' may be no more than 16 bits, so it is
|
||||||
* necessary to perform a loop here.
|
* necessary to perform a loop here.
|
||||||
*/
|
*/
|
||||||
|
@ -275,7 +280,9 @@ png_create_png_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
|
||||||
|
|
||||||
# ifdef PNG_SETJMP_SUPPORTED
|
# ifdef PNG_SETJMP_SUPPORTED
|
||||||
if (!setjmp(create_jmp_buf))
|
if (!setjmp(create_jmp_buf))
|
||||||
|
# endif
|
||||||
{
|
{
|
||||||
|
# ifdef PNG_SETJMP_SUPPORTED
|
||||||
/* Temporarily fake out the longjmp information until we have
|
/* Temporarily fake out the longjmp information until we have
|
||||||
* successfully completed this function. This only works if we have
|
* successfully completed this function. This only works if we have
|
||||||
* setjmp() support compiled in, but it is safe - this stuff should
|
* setjmp() support compiled in, but it is safe - this stuff should
|
||||||
|
@ -284,8 +291,6 @@ png_create_png_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
|
||||||
create_struct.jmp_buf_ptr = &create_jmp_buf;
|
create_struct.jmp_buf_ptr = &create_jmp_buf;
|
||||||
create_struct.jmp_buf_size = 0; /*stack allocation*/
|
create_struct.jmp_buf_size = 0; /*stack allocation*/
|
||||||
create_struct.longjmp_fn = longjmp;
|
create_struct.longjmp_fn = longjmp;
|
||||||
# else
|
|
||||||
{
|
|
||||||
# endif
|
# endif
|
||||||
/* Call the general version checker (shared with read and write code):
|
/* Call the general version checker (shared with read and write code):
|
||||||
*/
|
*/
|
||||||
|
@ -413,6 +418,8 @@ png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
|
||||||
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)
|
||||||
|
return;
|
||||||
*ptr_ptr = info_ptr;
|
*ptr_ptr = info_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -664,19 +671,20 @@ png_init_io(png_structrp png_ptr, png_FILE_p fp)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef PNG_SAVE_INT_32_SUPPORTED
|
# ifdef PNG_SAVE_INT_32_SUPPORTED
|
||||||
/* The png_save_int_32 function assumes integers are stored in two's
|
/* PNG signed integers are saved in 32-bit 2's complement format. ANSI C-90
|
||||||
* complement format. If this isn't the case, then this routine needs to
|
* defines a cast of a signed integer to an unsigned integer either to preserve
|
||||||
* be modified to write data in two's complement format. Note that,
|
* the value, if it is positive, or to calculate:
|
||||||
* the following works correctly even if png_int_32 has more than 32 bits
|
*
|
||||||
* (compare the more complex code required on read for sign extension.)
|
* (UNSIGNED_MAX+1) + integer
|
||||||
|
*
|
||||||
|
* Where UNSIGNED_MAX is the appropriate maximum unsigned value, so when the
|
||||||
|
* negative integral value is added the result will be an unsigned value
|
||||||
|
* correspnding to the 2's complement representation.
|
||||||
*/
|
*/
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_save_int_32(png_bytep buf, png_int_32 i)
|
png_save_int_32(png_bytep buf, png_int_32 i)
|
||||||
{
|
{
|
||||||
buf[0] = (png_byte)((i >> 24) & 0xff);
|
png_save_uint_32(buf, i);
|
||||||
buf[1] = (png_byte)((i >> 16) & 0xff);
|
|
||||||
buf[2] = (png_byte)((i >> 8) & 0xff);
|
|
||||||
buf[3] = (png_byte)(i & 0xff);
|
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
@ -722,6 +730,7 @@ png_convert_to_rfc1123_buffer(char out[29], png_const_timep ptime)
|
||||||
APPEND(':');
|
APPEND(':');
|
||||||
APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->second);
|
APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->second);
|
||||||
APPEND_STRING(" +0000"); /* This reliably terminates the buffer */
|
APPEND_STRING(" +0000"); /* This reliably terminates the buffer */
|
||||||
|
PNG_UNUSED (pos)
|
||||||
|
|
||||||
# undef APPEND
|
# undef APPEND
|
||||||
# undef APPEND_NUMBER
|
# undef APPEND_NUMBER
|
||||||
|
@ -766,14 +775,15 @@ 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.17 - March 26, 2015" PNG_STRING_NEWLINE \
|
"libpng version 1.6.21 - January 15, 2016" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1998-2015 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
|
"Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
|
||||||
|
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.17 - March 26, 2015\
|
return "libpng version 1.6.21 - January 15, 2016\
|
||||||
Copyright (c) 1998-2015 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.";
|
||||||
# endif
|
# endif
|
||||||
|
@ -1235,7 +1245,8 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
|
||||||
|
|
||||||
/* Check xy and, implicitly, z. Note that wide gamut color spaces typically
|
/* Check xy and, implicitly, z. Note that wide gamut color spaces typically
|
||||||
* have end points with 0 tristimulus values (these are impossible end
|
* have end points with 0 tristimulus values (these are impossible end
|
||||||
* points, but they are used to cover the possible colors.)
|
* points, but they are used to cover the possible colors). We check
|
||||||
|
* xy->whitey against 5, not 0, to avoid a possible integer overflow.
|
||||||
*/
|
*/
|
||||||
if (xy->redx < 0 || xy->redx > PNG_FP_1) return 1;
|
if (xy->redx < 0 || xy->redx > PNG_FP_1) return 1;
|
||||||
if (xy->redy < 0 || xy->redy > PNG_FP_1-xy->redx) return 1;
|
if (xy->redy < 0 || xy->redy > PNG_FP_1-xy->redx) return 1;
|
||||||
|
@ -1244,7 +1255,7 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
|
||||||
if (xy->bluex < 0 || xy->bluex > PNG_FP_1) return 1;
|
if (xy->bluex < 0 || xy->bluex > PNG_FP_1) return 1;
|
||||||
if (xy->bluey < 0 || xy->bluey > PNG_FP_1-xy->bluex) return 1;
|
if (xy->bluey < 0 || xy->bluey > PNG_FP_1-xy->bluex) return 1;
|
||||||
if (xy->whitex < 0 || xy->whitex > PNG_FP_1) return 1;
|
if (xy->whitex < 0 || xy->whitex > PNG_FP_1) return 1;
|
||||||
if (xy->whitey < 0 || xy->whitey > PNG_FP_1-xy->whitex) return 1;
|
if (xy->whitey < 5 || xy->whitey > PNG_FP_1-xy->whitex) return 1;
|
||||||
|
|
||||||
/* The reverse calculation is more difficult because the original tristimulus
|
/* The reverse calculation is more difficult because the original tristimulus
|
||||||
* value had 9 independent values (red,green,blue)x(X,Y,Z) however only 8
|
* value had 9 independent values (red,green,blue)x(X,Y,Z) however only 8
|
||||||
|
@ -1702,7 +1713,6 @@ png_colorspace_set_chromaticities(png_const_structrp png_ptr,
|
||||||
*/
|
*/
|
||||||
colorspace->flags |= PNG_COLORSPACE_INVALID;
|
colorspace->flags |= PNG_COLORSPACE_INVALID;
|
||||||
png_error(png_ptr, "internal error checking chromaticities");
|
png_error(png_ptr, "internal error checking chromaticities");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0; /* failed */
|
return 0; /* failed */
|
||||||
|
@ -1730,7 +1740,6 @@ png_colorspace_set_endpoints(png_const_structrp png_ptr,
|
||||||
default:
|
default:
|
||||||
colorspace->flags |= PNG_COLORSPACE_INVALID;
|
colorspace->flags |= PNG_COLORSPACE_INVALID;
|
||||||
png_error(png_ptr, "internal error checking chromaticities");
|
png_error(png_ptr, "internal error checking chromaticities");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0; /* failed */
|
return 0; /* failed */
|
||||||
|
@ -2056,8 +2065,8 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
temp = png_get_uint_32(profile+12); /* profile/device class */
|
temp = png_get_uint_32(profile+12); /* profile/device class */
|
||||||
switch (temp)
|
switch (temp)
|
||||||
{
|
{
|
||||||
case 0x73636E72: /* 'scnr' */
|
case 0x73636e72: /* 'scnr' */
|
||||||
case 0x6D6E7472: /* 'mntr' */
|
case 0x6d6e7472: /* 'mntr' */
|
||||||
case 0x70727472: /* 'prtr' */
|
case 0x70727472: /* 'prtr' */
|
||||||
case 0x73706163: /* 'spac' */
|
case 0x73706163: /* 'spac' */
|
||||||
/* All supported */
|
/* All supported */
|
||||||
|
@ -2068,7 +2077,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
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
|
||||||
* fashion, if an app uses the AToB0Tag in the profile the results are
|
* fashion, if an app uses the AToB0Tag in the profile the results are
|
||||||
* undefined unless the result is sent to the intended device,
|
* undefined unless the result is sent to the intended device,
|
||||||
|
@ -2078,7 +2087,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
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
|
||||||
* contain an AToB0 tag that is open to misinterpretation. Almost
|
* contain an AToB0 tag that is open to misinterpretation. Almost
|
||||||
* certainly it will fail the tests below.
|
* certainly it will fail the tests below.
|
||||||
|
@ -2104,8 +2113,8 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
||||||
temp = png_get_uint_32(profile+20);
|
temp = png_get_uint_32(profile+20);
|
||||||
switch (temp)
|
switch (temp)
|
||||||
{
|
{
|
||||||
case 0x58595A20: /* 'XYZ ' */
|
case 0x58595a20: /* 'XYZ ' */
|
||||||
case 0x4C616220: /* 'Lab ' */
|
case 0x4c616220: /* 'Lab ' */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -2275,8 +2284,8 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Length *and* intent must match */
|
/* Length *and* intent must match */
|
||||||
if (length == png_sRGB_checks[i].length &&
|
if (length == (png_uint_32) png_sRGB_checks[i].length &&
|
||||||
intent == png_sRGB_checks[i].intent)
|
intent == (png_uint_32) png_sRGB_checks[i].intent)
|
||||||
{
|
{
|
||||||
/* Now calculate the adler32 if not done already. */
|
/* Now calculate the adler32 if not done already. */
|
||||||
if (adler == 0)
|
if (adler == 0)
|
||||||
|
@ -2891,7 +2900,7 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
int czero, clead, cdigits;
|
unsigned int czero, clead, cdigits;
|
||||||
char exponent[10];
|
char exponent[10];
|
||||||
|
|
||||||
/* Allow up to two leading zeros - this will not lengthen
|
/* Allow up to two leading zeros - this will not lengthen
|
||||||
|
@ -2921,7 +2930,7 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
|
||||||
* of the loop don't break the number into parts so
|
* of the loop don't break the number into parts so
|
||||||
* that the final digit is rounded.
|
* that the final digit is rounded.
|
||||||
*/
|
*/
|
||||||
if (cdigits+czero-clead+1 < (int)precision)
|
if (cdigits+czero+1 < precision+clead)
|
||||||
fp = modf(fp, &d);
|
fp = modf(fp, &d);
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -3027,7 +3036,7 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
|
||||||
*ascii++ = (char)(48 + (int)d), ++cdigits;
|
*ascii++ = (char)(48 + (int)d), ++cdigits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (cdigits+czero-clead < (int)precision && fp > DBL_MIN);
|
while (cdigits+czero < precision+clead && fp > DBL_MIN);
|
||||||
|
|
||||||
/* The total output count (max) is now 4+precision */
|
/* The total output count (max) is now 4+precision */
|
||||||
|
|
||||||
|
@ -3095,7 +3104,7 @@ png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
|
||||||
/* Need another size check here for the exponent digits, so
|
/* Need another size check here for the exponent digits, so
|
||||||
* this need not be considered above.
|
* this need not be considered above.
|
||||||
*/
|
*/
|
||||||
if ((int)size > cdigits)
|
if (size > cdigits)
|
||||||
{
|
{
|
||||||
while (cdigits > 0) *ascii++ = exponent[--cdigits];
|
while (cdigits > 0) *ascii++ = exponent[--cdigits];
|
||||||
|
|
||||||
|
@ -3143,7 +3152,7 @@ png_ascii_from_fixed(png_const_structrp png_ptr, png_charp ascii,
|
||||||
|
|
||||||
/* Avoid overflow here on the minimum integer. */
|
/* Avoid overflow here on the minimum integer. */
|
||||||
if (fp < 0)
|
if (fp < 0)
|
||||||
*ascii++ = 45, --size, num = -fp;
|
*ascii++ = 45, num = -fp;
|
||||||
else
|
else
|
||||||
num = fp;
|
num = fp;
|
||||||
|
|
||||||
|
@ -3674,7 +3683,7 @@ png_exp(png_fixed_point x)
|
||||||
if (x > 0 && x <= 0xfffff) /* Else overflow or zero (underflow) */
|
if (x > 0 && x <= 0xfffff) /* Else overflow or zero (underflow) */
|
||||||
{
|
{
|
||||||
/* Obtain a 4-bit approximation */
|
/* Obtain a 4-bit approximation */
|
||||||
png_uint_32 e = png_32bit_exp[(x >> 12) & 0xf];
|
png_uint_32 e = png_32bit_exp[(x >> 12) & 0x0f];
|
||||||
|
|
||||||
/* Incorporate the low 12 bits - these decrease the returned value by
|
/* Incorporate the low 12 bits - these decrease the returned value by
|
||||||
* multiplying by a number less than 1 if the bit is set. The multiplier
|
* multiplying by a number less than 1 if the bit is set. The multiplier
|
||||||
|
@ -4236,7 +4245,7 @@ png_set_option(png_structrp png_ptr, int option, int onoff)
|
||||||
* contrib/tools/makesRGB.c. The actual sRGB transfer curve defined in the
|
* contrib/tools/makesRGB.c. The actual sRGB transfer curve defined in the
|
||||||
* specification (see the article at http://en.wikipedia.org/wiki/SRGB)
|
* specification (see the article at http://en.wikipedia.org/wiki/SRGB)
|
||||||
* is used, not the gamma=1/2.2 approximation use elsewhere in libpng.
|
* is used, not the gamma=1/2.2 approximation use elsewhere in libpng.
|
||||||
* The sRGB to linear table is exact (to the nearest 16 bit linear fraction).
|
* The sRGB to linear table is exact (to the nearest 16-bit linear fraction).
|
||||||
* The inverse (linear to sRGB) table has accuracies as follows:
|
* The inverse (linear to sRGB) table has accuracies as follows:
|
||||||
*
|
*
|
||||||
* For all possible (255*65535+1) input values:
|
* For all possible (255*65535+1) input values:
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng version 1.6.17, March 26, 2015
|
* libpng version 1.6.21, January 15, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -11,11 +11,131 @@
|
||||||
*
|
*
|
||||||
* 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.89c, 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.17, March 26, 2015: Glenn
|
* libpng versions 0.97, January 1998, through 1.6.21, January 15, 2016:
|
||||||
|
* Glenn Randers-Pehrson.
|
||||||
* See also "Contributing Authors", below.
|
* See also "Contributing Authors", below.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
|
||||||
*
|
*
|
||||||
* Note about libpng version numbers:
|
* If you modify libpng you may insert additional notices immediately following
|
||||||
|
* this sentence.
|
||||||
|
*
|
||||||
|
* This code is released under the libpng license.
|
||||||
|
*
|
||||||
|
* libpng versions 1.0.7, July 1, 2000, through 1.6.21, January 15, 2016, 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
|
||||||
|
* disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
|
* added to the list of Contributing Authors:
|
||||||
|
*
|
||||||
|
* Simon-Pierre Cadieux
|
||||||
|
* Eric S. Raymond
|
||||||
|
* Mans Rullgard
|
||||||
|
* Cosmin Truta
|
||||||
|
* Gilles Vollant
|
||||||
|
* James Yu
|
||||||
|
*
|
||||||
|
* and with the following additions to the disclaimer:
|
||||||
|
*
|
||||||
|
* There is no warranty against interference with your enjoyment of the
|
||||||
|
* library or against infringement. There is no warranty that our
|
||||||
|
* efforts or the library will fulfill any of your particular purposes
|
||||||
|
* or needs. This library is provided with all faults, and the entire
|
||||||
|
* risk of satisfactory quality, performance, accuracy, and effort is with
|
||||||
|
* the user.
|
||||||
|
*
|
||||||
|
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
|
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
|
* libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
|
* license as libpng-0.96, with the following individuals added to the list
|
||||||
|
* of Contributing Authors:
|
||||||
|
*
|
||||||
|
* Tom Lane
|
||||||
|
* Glenn Randers-Pehrson
|
||||||
|
* Willem van Schaik
|
||||||
|
*
|
||||||
|
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||||
|
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||||
|
* and are distributed according to the same disclaimer and license as
|
||||||
|
* libpng-0.88, with the following individuals added to the list of
|
||||||
|
* Contributing Authors:
|
||||||
|
*
|
||||||
|
* John Bowler
|
||||||
|
* Kevin Bracey
|
||||||
|
* Sam Bushell
|
||||||
|
* Magnus Holmgren
|
||||||
|
* Greg Roelofs
|
||||||
|
* Tom Tanner
|
||||||
|
*
|
||||||
|
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
|
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
*
|
||||||
|
* For the purposes of this copyright and license, "Contributing Authors"
|
||||||
|
* is defined as the following set of individuals:
|
||||||
|
*
|
||||||
|
* Andreas Dilger
|
||||||
|
* Dave Martindale
|
||||||
|
* Guy Eric Schalnat
|
||||||
|
* Paul Schmidt
|
||||||
|
* Tim Wegner
|
||||||
|
*
|
||||||
|
* The PNG Reference Library is supplied "AS IS". The Contributing Authors
|
||||||
|
* and Group 42, Inc. disclaim all warranties, expressed or implied,
|
||||||
|
* including, without limitation, the warranties of merchantability and of
|
||||||
|
* fitness for any purpose. The Contributing Authors and Group 42, Inc.
|
||||||
|
* assume no liability for direct, indirect, incidental, special, exemplary,
|
||||||
|
* or consequential damages, which may result from the use of the PNG
|
||||||
|
* Reference Library, even if advised of the possibility of such damage.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted to use, copy, modify, and distribute this
|
||||||
|
* source code, or portions hereof, for any purpose, without fee, subject
|
||||||
|
* to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this source code must not be misrepresented.
|
||||||
|
*
|
||||||
|
* 2. Altered versions must be plainly marked as such and must not
|
||||||
|
* be misrepresented as being the original source.
|
||||||
|
*
|
||||||
|
* 3. This Copyright notice may not be removed or altered from any
|
||||||
|
* source or altered source distribution.
|
||||||
|
*
|
||||||
|
* The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||||
|
* fee, and encourage the use of this source code as a component to
|
||||||
|
* supporting the PNG file format in commercial products. If you use this
|
||||||
|
* source code in a product, acknowledgment is not required but would be
|
||||||
|
* appreciated.
|
||||||
|
*
|
||||||
|
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A "png_get_copyright" function is available, for convenient use in "about"
|
||||||
|
* boxes and the like:
|
||||||
|
*
|
||||||
|
* printf("%s", png_get_copyright(NULL));
|
||||||
|
*
|
||||||
|
* Also, the PNG logo (in PNG format, of course) is supplied in the
|
||||||
|
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
|
||||||
|
* a certification mark of the Open Source Initiative. OSI has not addressed
|
||||||
|
* the additional disclaimers inserted at version 1.0.7.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The contributing authors would like to thank all those who helped
|
||||||
|
* with testing, bug fixes, and patience. This wouldn't have been
|
||||||
|
* possible without all of you.
|
||||||
|
*
|
||||||
|
* Thanks to Frank J. T. Wojcik for helping with the documentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Note about libpng version numbers:
|
||||||
*
|
*
|
||||||
* Due to various miscommunications, unforeseen code incompatibilities
|
* Due to various miscommunications, unforeseen code incompatibilities
|
||||||
* and occasional factors outside the authors' control, version numbering
|
* and occasional factors outside the authors' control, version numbering
|
||||||
|
@ -59,163 +179,14 @@
|
||||||
* 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
|
* 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
|
||||||
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
|
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
|
||||||
* 1.0.7 1 10007 (still compatible)
|
* 1.0.7 1 10007 (still compatible)
|
||||||
* 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
|
* ...
|
||||||
* 1.0.8rc1 1 10008 2.1.0.8rc1
|
* 1.0.19 10 10019 10.so.0.19[.0]
|
||||||
* 1.0.8 1 10008 2.1.0.8
|
* ...
|
||||||
* 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
|
* 1.2.53 13 10253 12.so.0.53[.0]
|
||||||
* 1.0.9rc1 1 10009 2.1.0.9rc1
|
* ...
|
||||||
* 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
|
* 1.5.23 15 10523 15.so.15.23[.0]
|
||||||
* 1.0.9rc2 1 10009 2.1.0.9rc2
|
* ...
|
||||||
* 1.0.9 1 10009 2.1.0.9
|
* 1.6.21 16 10621 16.so.16.21[.0]
|
||||||
* 1.0.10beta1 1 10010 2.1.0.10beta1
|
|
||||||
* 1.0.10rc1 1 10010 2.1.0.10rc1
|
|
||||||
* 1.0.10 1 10010 2.1.0.10
|
|
||||||
* 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
|
|
||||||
* 1.0.11rc1 1 10011 2.1.0.11rc1
|
|
||||||
* 1.0.11 1 10011 2.1.0.11
|
|
||||||
* 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
|
|
||||||
* 1.0.12rc1 2 10012 2.1.0.12rc1
|
|
||||||
* 1.0.12 2 10012 2.1.0.12
|
|
||||||
* 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned)
|
|
||||||
* 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
|
|
||||||
* 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
|
|
||||||
* 1.2.0rc1 3 10200 3.1.2.0rc1
|
|
||||||
* 1.2.0 3 10200 3.1.2.0
|
|
||||||
* 1.2.1beta1-4 3 10201 3.1.2.1beta1-4
|
|
||||||
* 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
|
|
||||||
* 1.2.1 3 10201 3.1.2.1
|
|
||||||
* 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
|
|
||||||
* 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
|
|
||||||
* 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
|
|
||||||
* 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
|
|
||||||
* 1.0.13 10 10013 10.so.0.1.0.13
|
|
||||||
* 1.2.2 12 10202 12.so.0.1.2.2
|
|
||||||
* 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
|
|
||||||
* 1.2.3 12 10203 12.so.0.1.2.3
|
|
||||||
* 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
|
|
||||||
* 1.0.14rc1 13 10014 10.so.0.1.0.14rc1
|
|
||||||
* 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
|
|
||||||
* 1.0.14 10 10014 10.so.0.1.0.14
|
|
||||||
* 1.2.4 13 10204 12.so.0.1.2.4
|
|
||||||
* 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
|
|
||||||
* 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3
|
|
||||||
* 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3
|
|
||||||
* 1.0.15 10 10015 10.so.0.1.0.15
|
|
||||||
* 1.2.5 13 10205 12.so.0.1.2.5
|
|
||||||
* 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
|
|
||||||
* 1.0.16 10 10016 10.so.0.1.0.16
|
|
||||||
* 1.2.6 13 10206 12.so.0.1.2.6
|
|
||||||
* 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
|
|
||||||
* 1.0.17rc1 10 10017 12.so.0.1.0.17rc1
|
|
||||||
* 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
|
|
||||||
* 1.0.17 10 10017 12.so.0.1.0.17
|
|
||||||
* 1.2.7 13 10207 12.so.0.1.2.7
|
|
||||||
* 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
|
|
||||||
* 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5
|
|
||||||
* 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
|
|
||||||
* 1.0.18 10 10018 12.so.0.1.0.18
|
|
||||||
* 1.2.8 13 10208 12.so.0.1.2.8
|
|
||||||
* 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
|
|
||||||
* 1.2.9beta4-11 13 10209 12.so.0.9[.0]
|
|
||||||
* 1.2.9rc1 13 10209 12.so.0.9[.0]
|
|
||||||
* 1.2.9 13 10209 12.so.0.9[.0]
|
|
||||||
* 1.2.10beta1-7 13 10210 12.so.0.10[.0]
|
|
||||||
* 1.2.10rc1-2 13 10210 12.so.0.10[.0]
|
|
||||||
* 1.2.10 13 10210 12.so.0.10[.0]
|
|
||||||
* 1.4.0beta1-5 14 10400 14.so.0.0[.0]
|
|
||||||
* 1.2.11beta1-4 13 10211 12.so.0.11[.0]
|
|
||||||
* 1.4.0beta7-8 14 10400 14.so.0.0[.0]
|
|
||||||
* 1.2.11 13 10211 12.so.0.11[.0]
|
|
||||||
* 1.2.12 13 10212 12.so.0.12[.0]
|
|
||||||
* 1.4.0beta9-14 14 10400 14.so.0.0[.0]
|
|
||||||
* 1.2.13 13 10213 12.so.0.13[.0]
|
|
||||||
* 1.4.0beta15-36 14 10400 14.so.0.0[.0]
|
|
||||||
* 1.4.0beta37-87 14 10400 14.so.14.0[.0]
|
|
||||||
* 1.4.0rc01 14 10400 14.so.14.0[.0]
|
|
||||||
* 1.4.0beta88-109 14 10400 14.so.14.0[.0]
|
|
||||||
* 1.4.0rc02-08 14 10400 14.so.14.0[.0]
|
|
||||||
* 1.4.0 14 10400 14.so.14.0[.0]
|
|
||||||
* 1.4.1beta01-03 14 10401 14.so.14.1[.0]
|
|
||||||
* 1.4.1rc01 14 10401 14.so.14.1[.0]
|
|
||||||
* 1.4.1beta04-12 14 10401 14.so.14.1[.0]
|
|
||||||
* 1.4.1 14 10401 14.so.14.1[.0]
|
|
||||||
* 1.4.2 14 10402 14.so.14.2[.0]
|
|
||||||
* 1.4.3 14 10403 14.so.14.3[.0]
|
|
||||||
* 1.4.4 14 10404 14.so.14.4[.0]
|
|
||||||
* 1.5.0beta01-58 15 10500 15.so.15.0[.0]
|
|
||||||
* 1.5.0rc01-07 15 10500 15.so.15.0[.0]
|
|
||||||
* 1.5.0 15 10500 15.so.15.0[.0]
|
|
||||||
* 1.5.1beta01-11 15 10501 15.so.15.1[.0]
|
|
||||||
* 1.5.1rc01-02 15 10501 15.so.15.1[.0]
|
|
||||||
* 1.5.1 15 10501 15.so.15.1[.0]
|
|
||||||
* 1.5.2beta01-03 15 10502 15.so.15.2[.0]
|
|
||||||
* 1.5.2rc01-03 15 10502 15.so.15.2[.0]
|
|
||||||
* 1.5.2 15 10502 15.so.15.2[.0]
|
|
||||||
* 1.5.3beta01-10 15 10503 15.so.15.3[.0]
|
|
||||||
* 1.5.3rc01-02 15 10503 15.so.15.3[.0]
|
|
||||||
* 1.5.3beta11 15 10503 15.so.15.3[.0]
|
|
||||||
* 1.5.3 [omitted]
|
|
||||||
* 1.5.4beta01-08 15 10504 15.so.15.4[.0]
|
|
||||||
* 1.5.4rc01 15 10504 15.so.15.4[.0]
|
|
||||||
* 1.5.4 15 10504 15.so.15.4[.0]
|
|
||||||
* 1.5.5beta01-08 15 10505 15.so.15.5[.0]
|
|
||||||
* 1.5.5rc01 15 10505 15.so.15.5[.0]
|
|
||||||
* 1.5.5 15 10505 15.so.15.5[.0]
|
|
||||||
* 1.5.6beta01-07 15 10506 15.so.15.6[.0]
|
|
||||||
* 1.5.6rc01-03 15 10506 15.so.15.6[.0]
|
|
||||||
* 1.5.6 15 10506 15.so.15.6[.0]
|
|
||||||
* 1.5.7beta01-05 15 10507 15.so.15.7[.0]
|
|
||||||
* 1.5.7rc01-03 15 10507 15.so.15.7[.0]
|
|
||||||
* 1.5.7 15 10507 15.so.15.7[.0]
|
|
||||||
* 1.6.0beta01-40 16 10600 16.so.16.0[.0]
|
|
||||||
* 1.6.0rc01-08 16 10600 16.so.16.0[.0]
|
|
||||||
* 1.6.0 16 10600 16.so.16.0[.0]
|
|
||||||
* 1.6.1beta01-09 16 10601 16.so.16.1[.0]
|
|
||||||
* 1.6.1rc01 16 10601 16.so.16.1[.0]
|
|
||||||
* 1.6.1 16 10601 16.so.16.1[.0]
|
|
||||||
* 1.6.2beta01 16 10602 16.so.16.2[.0]
|
|
||||||
* 1.6.2rc01-06 16 10602 16.so.16.2[.0]
|
|
||||||
* 1.6.2 16 10602 16.so.16.2[.0]
|
|
||||||
* 1.6.3beta01-11 16 10603 16.so.16.3[.0]
|
|
||||||
* 1.6.3rc01 16 10603 16.so.16.3[.0]
|
|
||||||
* 1.6.3 16 10603 16.so.16.3[.0]
|
|
||||||
* 1.6.4beta01-02 16 10604 16.so.16.4[.0]
|
|
||||||
* 1.6.4rc01 16 10604 16.so.16.4[.0]
|
|
||||||
* 1.6.4 16 10604 16.so.16.4[.0]
|
|
||||||
* 1.6.5 16 10605 16.so.16.5[.0]
|
|
||||||
* 1.6.6 16 10606 16.so.16.6[.0]
|
|
||||||
* 1.6.7beta01-04 16 10607 16.so.16.7[.0]
|
|
||||||
* 1.6.7rc01-03 16 10607 16.so.16.7[.0]
|
|
||||||
* 1.6.7 16 10607 16.so.16.7[.0]
|
|
||||||
* 1.6.8beta01-02 16 10608 16.so.16.8[.0]
|
|
||||||
* 1.6.8rc01-02 16 10608 16.so.16.8[.0]
|
|
||||||
* 1.6.8 16 10608 16.so.16.8[.0]
|
|
||||||
* 1.6.9beta01-04 16 10609 16.so.16.9[.0]
|
|
||||||
* 1.6.9rc01-02 16 10609 16.so.16.9[.0]
|
|
||||||
* 1.6.9 16 10609 16.so.16.9[.0]
|
|
||||||
* 1.6.10beta01-03 16 10610 16.so.16.10[.0]
|
|
||||||
* 1.6.10rc01-03 16 10610 16.so.16.10[.0]
|
|
||||||
* 1.6.10 16 10610 16.so.16.10[.0]
|
|
||||||
* 1.6.11beta01-06 16 10611 16.so.16.11[.0]
|
|
||||||
* 1.6.11rc01-02 16 10611 16.so.16.11[.0]
|
|
||||||
* 1.6.11 16 10611 16.so.16.11[.0]
|
|
||||||
* 1.6.12rc01-03 16 10612 16.so.16.12[.0]
|
|
||||||
* 1.6.12 16 10612 16.so.16.12[.0]
|
|
||||||
* 1.6.13beta01-04 16 10613 16.so.16.13[.0]
|
|
||||||
* 1.6.13rc01-02 16 10613 16.so.16.13[.0]
|
|
||||||
* 1.6.13 16 10613 16.so.16.13[.0]
|
|
||||||
* 1.6.14beta01-07 16 10614 16.so.16.14[.0]
|
|
||||||
* 1.6.14rc01-02 16 10614 16.so.16.14[.0]
|
|
||||||
* 1.6.14 16 10614 16.so.16.14[.0]
|
|
||||||
* 1.6.15beta01-08 16 10615 16.so.16.15[.0]
|
|
||||||
* 1.6.15rc01-03 16 10615 16.so.16.15[.0]
|
|
||||||
* 1.6.15 16 10615 16.so.16.15[.0]
|
|
||||||
* 1.6.16beta01-03 16 10616 16.so.16.16[.0]
|
|
||||||
* 1.6.16rc01-02 16 10616 16.so.16.16[.0]
|
|
||||||
* 1.6.16 16 10616 16.so.16.16[.0]
|
|
||||||
* 1.6.17beta01-06 16 10617 16.so.16.17[.0]
|
|
||||||
* 1.6.17rc01-06 16 10617 16.so.16.17[.0]
|
|
||||||
* 1.6.17 16 10617 16.so.16.17[.0]
|
|
||||||
*
|
*
|
||||||
* 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
|
||||||
|
@ -234,138 +205,22 @@
|
||||||
* DLLNUM will change each time there are forward or backward changes
|
* DLLNUM will change each time there are forward or backward changes
|
||||||
* in binary compatibility (e.g., when a new feature is added).
|
* in binary compatibility (e.g., when a new feature is added).
|
||||||
*
|
*
|
||||||
* See libpng-manual.txt or libpng.3 for more information. The PNG
|
* See libpng.txt or libpng.3 for more information. The PNG specification
|
||||||
* specification is available as a W3C Recommendation and as an ISO
|
* is available as a W3C Recommendation and as an ISO Specification,
|
||||||
* Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/
|
* <http://www.w3.org/TR/2003/REC-PNG-20031110/
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
|
|
||||||
*
|
|
||||||
* If you modify libpng you may insert additional notices immediately following
|
|
||||||
* this sentence.
|
|
||||||
*
|
|
||||||
* This code is released under the libpng license.
|
|
||||||
*
|
|
||||||
* libpng versions 1.2.6, August 15, 2004, through 1.6.17, March 26, 2015, are
|
|
||||||
* Copyright (c) 2004, 2006-2015 Glenn Randers-Pehrson, and are
|
|
||||||
* distributed according to the same disclaimer and license as libpng-1.2.5
|
|
||||||
* with the following individual added to the list of Contributing Authors:
|
|
||||||
*
|
|
||||||
* Cosmin Truta
|
|
||||||
*
|
|
||||||
* libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
|
|
||||||
* Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
|
|
||||||
* distributed according to the same disclaimer and license as libpng-1.0.6
|
|
||||||
* with the following individuals added to the list of Contributing Authors:
|
|
||||||
*
|
|
||||||
* Simon-Pierre Cadieux
|
|
||||||
* Eric S. Raymond
|
|
||||||
* Gilles Vollant
|
|
||||||
*
|
|
||||||
* and with the following additions to the disclaimer:
|
|
||||||
*
|
|
||||||
* There is no warranty against interference with your enjoyment of the
|
|
||||||
* library or against infringement. There is no warranty that our
|
|
||||||
* efforts or the library will fulfill any of your particular purposes
|
|
||||||
* or needs. This library is provided with all faults, and the entire
|
|
||||||
* risk of satisfactory quality, performance, accuracy, and effort is with
|
|
||||||
* the user.
|
|
||||||
*
|
|
||||||
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
|
||||||
* Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
|
|
||||||
* distributed according to the same disclaimer and license as libpng-0.96,
|
|
||||||
* with the following individuals added to the list of Contributing Authors:
|
|
||||||
*
|
|
||||||
* Tom Lane
|
|
||||||
* Glenn Randers-Pehrson
|
|
||||||
* Willem van Schaik
|
|
||||||
*
|
|
||||||
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
|
||||||
* Copyright (c) 1996, 1997 Andreas Dilger
|
|
||||||
* Distributed according to the same disclaimer and license as libpng-0.88,
|
|
||||||
* with the following individuals added to the list of Contributing Authors:
|
|
||||||
*
|
|
||||||
* John Bowler
|
|
||||||
* Kevin Bracey
|
|
||||||
* Sam Bushell
|
|
||||||
* Magnus Holmgren
|
|
||||||
* Greg Roelofs
|
|
||||||
* Tom Tanner
|
|
||||||
*
|
|
||||||
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
|
||||||
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
|
||||||
*
|
|
||||||
* For the purposes of this copyright and license, "Contributing Authors"
|
|
||||||
* is defined as the following set of individuals:
|
|
||||||
*
|
|
||||||
* Andreas Dilger
|
|
||||||
* Dave Martindale
|
|
||||||
* Guy Eric Schalnat
|
|
||||||
* Paul Schmidt
|
|
||||||
* Tim Wegner
|
|
||||||
*
|
|
||||||
* The PNG Reference Library is supplied "AS IS". The Contributing Authors
|
|
||||||
* and Group 42, Inc. disclaim all warranties, expressed or implied,
|
|
||||||
* including, without limitation, the warranties of merchantability and of
|
|
||||||
* fitness for any purpose. The Contributing Authors and Group 42, Inc.
|
|
||||||
* assume no liability for direct, indirect, incidental, special, exemplary,
|
|
||||||
* or consequential damages, which may result from the use of the PNG
|
|
||||||
* Reference Library, even if advised of the possibility of such damage.
|
|
||||||
*
|
|
||||||
* Permission is hereby granted to use, copy, modify, and distribute this
|
|
||||||
* source code, or portions hereof, for any purpose, without fee, subject
|
|
||||||
* to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this source code must not be misrepresented.
|
|
||||||
*
|
|
||||||
* 2. Altered versions must be plainly marked as such and must not
|
|
||||||
* be misrepresented as being the original source.
|
|
||||||
*
|
|
||||||
* 3. This Copyright notice may not be removed or altered from
|
|
||||||
* any source or altered source distribution.
|
|
||||||
*
|
|
||||||
* The Contributing Authors and Group 42, Inc. specifically permit, without
|
|
||||||
* fee, and encourage the use of this source code as a component to
|
|
||||||
* supporting the PNG file format in commercial products. If you use this
|
|
||||||
* source code in a product, acknowledgment is not required but would be
|
|
||||||
* appreciated.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A "png_get_copyright" function is available, for convenient use in "about"
|
|
||||||
* boxes and the like:
|
|
||||||
*
|
|
||||||
* printf("%s", png_get_copyright(NULL));
|
|
||||||
*
|
|
||||||
* Also, the PNG logo (in PNG format, of course) is supplied in the
|
|
||||||
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Libpng is OSI Certified Open Source Software. OSI Certified is a
|
|
||||||
* certification mark of the Open Source Initiative.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The contributing authors would like to thank all those who helped
|
|
||||||
* with testing, bug fixes, and patience. This wouldn't have been
|
|
||||||
* possible without all of you.
|
|
||||||
*
|
|
||||||
* Thanks to Frank J. T. Wojcik for helping with the documentation.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Y2K compliance in libpng:
|
* Y2K compliance in libpng:
|
||||||
* =========================
|
* =========================
|
||||||
*
|
*
|
||||||
* March 26, 2015
|
* January 15, 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.17 are Y2K compliant. It is my belief that
|
* upward through 1.6.21 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
|
||||||
|
@ -427,9 +282,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* 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.17"
|
#define PNG_LIBPNG_VER_STRING "1.6.21"
|
||||||
#define PNG_HEADER_VERSION_STRING \
|
#define PNG_HEADER_VERSION_STRING \
|
||||||
" libpng version 1.6.17 - March 26, 2015\n"
|
" libpng version 1.6.21 - January 15, 2016\n"
|
||||||
|
|
||||||
#define PNG_LIBPNG_VER_SONUM 16
|
#define PNG_LIBPNG_VER_SONUM 16
|
||||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||||
|
@ -437,7 +292,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 17
|
#define PNG_LIBPNG_VER_RELEASE 21
|
||||||
|
|
||||||
/* 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:
|
||||||
|
@ -468,7 +323,7 @@
|
||||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
||||||
*/
|
*/
|
||||||
#define PNG_LIBPNG_VER 10617 /* 1.6.17 */
|
#define PNG_LIBPNG_VER 10621 /* 1.6.21 */
|
||||||
|
|
||||||
/* 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.
|
||||||
|
@ -525,17 +380,22 @@ extern "C" {
|
||||||
|
|
||||||
/* This file is arranged in several sections:
|
/* This file is arranged in several sections:
|
||||||
*
|
*
|
||||||
* 1. Any configuration options that can be specified by for the application
|
* 1. [omitted]
|
||||||
|
* 2. Any configuration options that can be specified by for the application
|
||||||
* code when it is built. (Build time configuration is in pnglibconf.h)
|
* code when it is built. (Build time configuration is in pnglibconf.h)
|
||||||
* 2. Type definitions (base types are defined in pngconf.h), structure
|
* 3. Type definitions (base types are defined in pngconf.h), structure
|
||||||
* definitions.
|
* definitions.
|
||||||
* 3. Exported library functions.
|
* 4. Exported library functions.
|
||||||
* 4. Simplified API.
|
* 5. Simplified API.
|
||||||
|
* 6. Implementation options.
|
||||||
*
|
*
|
||||||
* The library source code has additional files (principally pngpriv.h) that
|
* The library source code has additional files (principally pngpriv.h) that
|
||||||
* allow configuration of the library.
|
* allow configuration of the library.
|
||||||
*/
|
*/
|
||||||
/* Section 1: run time configuration
|
|
||||||
|
/* Section 1: [omitted] */
|
||||||
|
|
||||||
|
/* Section 2: run time configuration
|
||||||
* See pnglibconf.h for build time configuration
|
* See pnglibconf.h for build time configuration
|
||||||
*
|
*
|
||||||
* Run time configuration allows the application to choose between
|
* Run time configuration allows the application to choose between
|
||||||
|
@ -565,7 +425,7 @@ extern "C" {
|
||||||
* Otherwise the calls are mapped to png_error.
|
* Otherwise the calls are mapped to png_error.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Section 2: type definitions, including structures and compile time
|
/* Section 3: type definitions, including structures and compile time
|
||||||
* constants.
|
* constants.
|
||||||
* See pngconf.h for base types that vary by machine/system
|
* See pngconf.h for base types that vary by machine/system
|
||||||
*/
|
*/
|
||||||
|
@ -573,7 +433,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_17;
|
typedef char* png_libpng_version_1_6_21;
|
||||||
|
|
||||||
/* 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.
|
||||||
*
|
*
|
||||||
|
@ -889,7 +749,9 @@ typedef png_unknown_chunk * * png_unknown_chunkpp;
|
||||||
#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
|
#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
|
#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
|
||||||
#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
|
#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
|
||||||
|
#if INT_MAX >= 0x8000 /* else this might break */
|
||||||
#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
|
#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This is used for the transformation routines, as some of them
|
/* This is used for the transformation routines, as some of them
|
||||||
* change these values for the row. It also should enable using
|
* change these values for the row. It also should enable using
|
||||||
|
@ -993,7 +855,9 @@ PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
|
||||||
#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */
|
#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */
|
||||||
/* Added to libpng-1.5.4 */
|
/* Added to libpng-1.5.4 */
|
||||||
#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */
|
#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */
|
||||||
|
#if INT_MAX >= 0x8000 /* else this might break */
|
||||||
#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */
|
#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Flags for MNG supported features */
|
/* Flags for MNG supported features */
|
||||||
#define PNG_FLAG_MNG_EMPTY_PLTE 0x01
|
#define PNG_FLAG_MNG_EMPTY_PLTE 0x01
|
||||||
|
@ -1010,7 +874,7 @@ typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
|
||||||
png_alloc_size_t));
|
png_alloc_size_t));
|
||||||
typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
|
typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
|
||||||
|
|
||||||
/* Section 3: exported functions
|
/* Section 4: exported functions
|
||||||
* Here are the function definitions most commonly used. This is not
|
* Here are the function definitions most commonly used. This is not
|
||||||
* the place to find out how to use libpng. See libpng-manual.txt for the
|
* the place to find out how to use libpng. See libpng-manual.txt for the
|
||||||
* full explanation, see example.c for the summary. This just provides
|
* full explanation, see example.c for the summary. This just provides
|
||||||
|
@ -1383,13 +1247,13 @@ PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
|
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||||
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
|
/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
|
||||||
PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler,
|
PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler,
|
||||||
int flags));
|
int flags));
|
||||||
/* The values of the PNG_FILLER_ defines should NOT be changed */
|
/* The values of the PNG_FILLER_ defines should NOT be changed */
|
||||||
# define PNG_FILLER_BEFORE 0
|
# define PNG_FILLER_BEFORE 0
|
||||||
# define PNG_FILLER_AFTER 1
|
# define PNG_FILLER_AFTER 1
|
||||||
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
|
/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
|
||||||
PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr,
|
PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr,
|
||||||
png_uint_32 filler, int flags));
|
png_uint_32 filler, int flags));
|
||||||
#endif /* READ_FILLER || WRITE_FILLER */
|
#endif /* READ_FILLER || WRITE_FILLER */
|
||||||
|
@ -1623,35 +1487,7 @@ PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method,
|
||||||
#define PNG_FILTER_VALUE_LAST 5
|
#define PNG_FILTER_VALUE_LAST 5
|
||||||
|
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_SUPPORTED
|
||||||
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
|
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */
|
||||||
/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
|
|
||||||
* defines, either the default (minimum-sum-of-absolute-differences), or
|
|
||||||
* the experimental method (weighted-minimum-sum-of-absolute-differences).
|
|
||||||
*
|
|
||||||
* Weights are factors >= 1.0, indicating how important it is to keep the
|
|
||||||
* filter type consistent between rows. Larger numbers mean the current
|
|
||||||
* filter is that many times as likely to be the same as the "num_weights"
|
|
||||||
* previous filters. This is cumulative for each previous row with a weight.
|
|
||||||
* There needs to be "num_weights" values in "filter_weights", or it can be
|
|
||||||
* NULL if the weights aren't being specified. Weights have no influence on
|
|
||||||
* the selection of the first row filter. Well chosen weights can (in theory)
|
|
||||||
* improve the compression for a given image.
|
|
||||||
*
|
|
||||||
* Costs are factors >= 1.0 indicating the relative decoding costs of a
|
|
||||||
* filter type. Higher costs indicate more decoding expense, and are
|
|
||||||
* therefore less likely to be selected over a filter with lower computational
|
|
||||||
* costs. There needs to be a value in "filter_costs" for each valid filter
|
|
||||||
* type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
|
|
||||||
* setting the costs. Costs try to improve the speed of decompression without
|
|
||||||
* unduly increasing the compressed image size.
|
|
||||||
*
|
|
||||||
* A negative weight or cost indicates the default value is to be used, and
|
|
||||||
* values in the range [0.0, 1.0) indicate the value is to remain unchanged.
|
|
||||||
* The default values for both weights and costs are currently 1.0, but may
|
|
||||||
* change if good general weighting/cost heuristics can be found. If both
|
|
||||||
* the weights and costs are set to 1.0, this degenerates the WEIGHTED method
|
|
||||||
* to the UNWEIGHTED method, but with added encoding time/computation.
|
|
||||||
*/
|
|
||||||
PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr,
|
PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr,
|
||||||
int heuristic_method, int num_weights, png_const_doublep filter_weights,
|
int heuristic_method, int num_weights, png_const_doublep filter_weights,
|
||||||
png_const_doublep filter_costs))
|
png_const_doublep filter_costs))
|
||||||
|
@ -1661,9 +1497,7 @@ PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed,
|
||||||
png_const_fixed_point_p filter_costs))
|
png_const_fixed_point_p filter_costs))
|
||||||
#endif /* WRITE_WEIGHTED_FILTER */
|
#endif /* WRITE_WEIGHTED_FILTER */
|
||||||
|
|
||||||
/* Heuristic used for row filter selection. These defines should NOT be
|
/* The following are no longer used and will be removed from libpng-1.7: */
|
||||||
* changed.
|
|
||||||
*/
|
|
||||||
#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */
|
#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */
|
||||||
#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */
|
#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */
|
||||||
#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */
|
#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */
|
||||||
|
@ -2744,7 +2578,7 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
||||||
|
|
||||||
# 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) ^ 0xffffffffL) + 1)) \
|
? -((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,
|
||||||
|
@ -2764,10 +2598,17 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \
|
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||||
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
PNG_EXPORT(242, void, png_set_check_for_invalid_index,
|
||||||
|
(png_structrp png_ptr, int allowed));
|
||||||
|
# ifdef PNG_GET_PALETTE_MAX_SUPPORTED
|
||||||
|
PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
|
||||||
|
png_const_infop info_ptr));
|
||||||
|
# endif
|
||||||
|
#endif /* CHECK_FOR_INVALID_INDEX */
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* SIMPLIFIED API
|
* Section 5: SIMPLIFIED API
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
*
|
*
|
||||||
* Please read the documentation in libpng-manual.txt (TODO: write said
|
* Please read the documentation in libpng-manual.txt (TODO: write said
|
||||||
|
@ -2783,8 +2624,9 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
||||||
*
|
*
|
||||||
* To read a PNG file using the simplified API:
|
* To read a PNG file using the simplified API:
|
||||||
*
|
*
|
||||||
* 1) Declare a 'png_image' structure (see below) on the stack and set the
|
* 1) Declare a 'png_image' structure (see below) on the stack, set the
|
||||||
* version field to PNG_IMAGE_VERSION.
|
* version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL
|
||||||
|
* (this is REQUIRED, your program may crash if you don't do it.)
|
||||||
* 2) Call the appropriate png_image_begin_read... function.
|
* 2) Call the appropriate png_image_begin_read... function.
|
||||||
* 3) Set the png_image 'format' member to the required sample format.
|
* 3) Set the png_image 'format' member to the required sample format.
|
||||||
* 4) Allocate a buffer for the image and, if required, the color-map.
|
* 4) Allocate a buffer for the image and, if required, the color-map.
|
||||||
|
@ -2811,6 +2653,9 @@ PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
|
||||||
* when it is being read or defines the in-memory format of an image that you
|
* when it is being read or defines the in-memory format of an image that you
|
||||||
* need to write:
|
* need to write:
|
||||||
*/
|
*/
|
||||||
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \
|
||||||
|
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||||
|
|
||||||
#define PNG_IMAGE_VERSION 1
|
#define PNG_IMAGE_VERSION 1
|
||||||
|
|
||||||
typedef struct png_control *png_controlp;
|
typedef struct png_control *png_controlp;
|
||||||
|
@ -2910,7 +2755,7 @@ typedef struct
|
||||||
* called to read or write the color-map and set the format correctly for the
|
* called to read or write the color-map and set the format correctly for the
|
||||||
* image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
|
* image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
|
||||||
*
|
*
|
||||||
* NOTE: libpng can be built with particular features disabled, if you see
|
* NOTE: libpng can be built with particular features disabled. If you see
|
||||||
* compiler errors because the definition of one of the following flags has been
|
* compiler errors because the definition of one of the following flags has been
|
||||||
* compiled out it is because libpng does not have the required support. It is
|
* compiled out it is because libpng does not have the required support. It is
|
||||||
* possible, however, for the libpng configuration to enable the format on just
|
* possible, however, for the libpng configuration to enable the format on just
|
||||||
|
@ -2922,7 +2767,7 @@ typedef struct
|
||||||
*/
|
*/
|
||||||
#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */
|
#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */
|
||||||
#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */
|
#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */
|
||||||
#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2 byte channels else 1 byte */
|
#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2-byte channels else 1-byte */
|
||||||
#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */
|
#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */
|
||||||
|
|
||||||
#ifdef PNG_FORMAT_BGR_SUPPORTED
|
#ifdef PNG_FORMAT_BGR_SUPPORTED
|
||||||
|
@ -3209,9 +3054,11 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
||||||
*
|
*
|
||||||
* With all APIs row_stride is handled as in the read APIs - it is the spacing
|
* With all APIs row_stride is handled as in the read APIs - it is the spacing
|
||||||
* from one row to the next in component sized units (1 or 2 bytes) and if
|
* from one row to the next in component sized units (1 or 2 bytes) and if
|
||||||
* negative indicates a bottom-up row layout in the buffer.
|
* negative indicates a bottom-up row layout in the buffer. If row_stride is zero,
|
||||||
|
* libpng will calculate it for you from the image width and number of channels.
|
||||||
*
|
*
|
||||||
* Note that the write API does not support interlacing or sub-8-bit pixels.
|
* Note that the write API does not support interlacing, sub-8-bit pixels, indexed
|
||||||
|
* PNG (color_type 3) or most ancillary chunks.
|
||||||
*/
|
*/
|
||||||
#endif /* STDIO */
|
#endif /* STDIO */
|
||||||
#endif /* SIMPLIFIED_WRITE */
|
#endif /* SIMPLIFIED_WRITE */
|
||||||
|
@ -3220,17 +3067,8 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#endif /* SIMPLIFIED_{READ|WRITE} */
|
#endif /* SIMPLIFIED_{READ|WRITE} */
|
||||||
|
|
||||||
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
|
||||||
PNG_EXPORT(242, void, png_set_check_for_invalid_index,
|
|
||||||
(png_structrp png_ptr, int allowed));
|
|
||||||
# ifdef PNG_GET_PALETTE_MAX_SUPPORTED
|
|
||||||
PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
|
|
||||||
png_const_infop info_ptr));
|
|
||||||
# endif
|
|
||||||
#endif /* CHECK_FOR_INVALID_INDEX */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* IMPLEMENTATION OPTIONS
|
* Section 6: IMPLEMENTATION OPTIONS
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
*
|
*
|
||||||
* Support for arbitrary implementation-specific optimizations. The API allows
|
* Support for arbitrary implementation-specific optimizations. The API allows
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng version 1.6.17, March 26, 2015
|
* libpng version 1.6.21, January 15, 2016
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
*/
|
*/
|
||||||
#define PNG_CONST const /* backward compatibility only */
|
#define PNG_CONST const /* backward compatibility only */
|
||||||
|
|
||||||
/* This controls optimization of the reading of 16 and 32 bit values
|
/* This controls optimization of the reading of 16-bit and 32-bit values
|
||||||
* from PNG files. It can be set on a per-app-file basis - it
|
* from PNG files. It can be set on a per-app-file basis - it
|
||||||
* just changes whether a macro is used when the function is called.
|
* just changes whether a macro is used when the function is called.
|
||||||
* The library builder sets the default; if read functions are not
|
* The library builder sets the default; if read functions are not
|
||||||
|
@ -295,11 +295,11 @@
|
||||||
* table entries, so we discard it here. See the .dfn files in the
|
* table entries, so we discard it here. See the .dfn files in the
|
||||||
* scripts directory.
|
* scripts directory.
|
||||||
*/
|
*/
|
||||||
#ifndef PNG_EXPORTA
|
|
||||||
|
|
||||||
# define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#ifndef PNG_EXPORTA
|
||||||
PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \
|
# define PNG_EXPORTA(ordinal, type, name, args, attributes) \
|
||||||
extern attributes)
|
PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), PNGARG(args), \
|
||||||
|
PNG_LINKAGE_API attributes)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,
|
/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,
|
||||||
|
@ -307,7 +307,7 @@
|
||||||
*/
|
*/
|
||||||
#define PNG_EMPTY /*empty list*/
|
#define PNG_EMPTY /*empty list*/
|
||||||
|
|
||||||
#define PNG_EXPORT(ordinal, type, name, args)\
|
#define PNG_EXPORT(ordinal, type, name, args) \
|
||||||
PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)
|
PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)
|
||||||
|
|
||||||
/* Use PNG_REMOVED to comment out a removed interface. */
|
/* Use PNG_REMOVED to comment out a removed interface. */
|
||||||
|
@ -480,7 +480,7 @@
|
||||||
#if CHAR_BIT == 8 && UCHAR_MAX == 255
|
#if CHAR_BIT == 8 && UCHAR_MAX == 255
|
||||||
typedef unsigned char png_byte;
|
typedef unsigned char png_byte;
|
||||||
#else
|
#else
|
||||||
# error "libpng requires 8 bit bytes"
|
# error "libpng requires 8-bit bytes"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if INT_MIN == -32768 && INT_MAX == 32767
|
#if INT_MIN == -32768 && INT_MAX == 32767
|
||||||
|
@ -488,7 +488,7 @@
|
||||||
#elif SHRT_MIN == -32768 && SHRT_MAX == 32767
|
#elif SHRT_MIN == -32768 && SHRT_MAX == 32767
|
||||||
typedef short png_int_16;
|
typedef short png_int_16;
|
||||||
#else
|
#else
|
||||||
# error "libpng requires a signed 16 bit type"
|
# error "libpng requires a signed 16-bit type"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if UINT_MAX == 65535
|
#if UINT_MAX == 65535
|
||||||
|
@ -496,7 +496,7 @@
|
||||||
#elif USHRT_MAX == 65535
|
#elif USHRT_MAX == 65535
|
||||||
typedef unsigned short png_uint_16;
|
typedef unsigned short png_uint_16;
|
||||||
#else
|
#else
|
||||||
# error "libpng requires an unsigned 16 bit type"
|
# error "libpng requires an unsigned 16-bit type"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if INT_MIN < -2147483646 && INT_MAX > 2147483646
|
#if INT_MIN < -2147483646 && INT_MAX > 2147483646
|
||||||
|
@ -504,7 +504,7 @@
|
||||||
#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
|
#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
|
||||||
typedef long int png_int_32;
|
typedef long int png_int_32;
|
||||||
#else
|
#else
|
||||||
# error "libpng requires a signed 32 bit (or more) type"
|
# error "libpng requires a signed 32-bit (or more) type"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if UINT_MAX > 4294967294
|
#if UINT_MAX > 4294967294
|
||||||
|
@ -512,7 +512,7 @@
|
||||||
#elif ULONG_MAX > 4294967294
|
#elif ULONG_MAX > 4294967294
|
||||||
typedef unsigned long int png_uint_32;
|
typedef unsigned long int png_uint_32;
|
||||||
#else
|
#else
|
||||||
# error "libpng requires an unsigned 32 bit (or more) type"
|
# error "libpng requires an unsigned 32-bit (or more) type"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
|
/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* pngdebug.h - Debugging macros for libpng, also used in pngtest.c
|
/* pngdebug.h - Debugging macros for libpng, also used in pngtest.c
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.8 [December 19, 2013]
|
* Last changed in libpng 1.6.8 [December 19, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2013 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.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* 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.15 [November 20, 2014]
|
||||||
* Copyright (c) 1998-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014 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.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* 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.17 [March 26, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* pnginfo.h - header file for PNG reference library
|
/* pnginfo.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.1 [March 28, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
/* libpng 1.6.17 STANDARD API DEFINITION */
|
/* libpng 1.6.21 STANDARD API DEFINITION */
|
||||||
|
|
||||||
/* pnglibconf.h - library build configuration */
|
/* pnglibconf.h - library build configuration */
|
||||||
|
|
||||||
/* Libpng version 1.6.17 - March 26, 2015 */
|
/* Libpng version 1.6.21 - January 15, 2016 */
|
||||||
|
|
||||||
/* Copyright (c) 1998-2014 Glenn Randers-Pehrson */
|
/* Copyright (c) 1998-2015 Glenn Randers-Pehrson */
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
@ -101,8 +101,6 @@
|
||||||
#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
|
#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
#define PNG_SEQUENTIAL_READ_SUPPORTED
|
#define PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
#define PNG_SETJMP_SUPPORTED
|
#define PNG_SETJMP_SUPPORTED
|
||||||
#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
|
|
||||||
#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
|
|
||||||
#define PNG_SET_OPTION_SUPPORTED
|
#define PNG_SET_OPTION_SUPPORTED
|
||||||
#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
#define PNG_SET_USER_LIMITS_SUPPORTED
|
#define PNG_SET_USER_LIMITS_SUPPORTED
|
||||||
|
@ -187,11 +185,14 @@
|
||||||
/* end of options */
|
/* end of options */
|
||||||
/* settings */
|
/* settings */
|
||||||
#define PNG_API_RULE 0
|
#define PNG_API_RULE 0
|
||||||
#define PNG_COST_SHIFT 3
|
|
||||||
#define PNG_DEFAULT_READ_MACROS 1
|
#define PNG_DEFAULT_READ_MACROS 1
|
||||||
#define PNG_GAMMA_THRESHOLD_FIXED 5000
|
#define PNG_GAMMA_THRESHOLD_FIXED 5000
|
||||||
#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE
|
#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE
|
||||||
#define PNG_INFLATE_BUF_SIZE 1024
|
#define PNG_INFLATE_BUF_SIZE 1024
|
||||||
|
#define PNG_LINKAGE_API extern
|
||||||
|
#define PNG_LINKAGE_CALLBACK extern
|
||||||
|
#define PNG_LINKAGE_DATA extern
|
||||||
|
#define PNG_LINKAGE_FUNCTION extern
|
||||||
#define PNG_MAX_GAMMA_8 11
|
#define PNG_MAX_GAMMA_8 11
|
||||||
#define PNG_QUANTIZE_BLUE_BITS 5
|
#define PNG_QUANTIZE_BLUE_BITS 5
|
||||||
#define PNG_QUANTIZE_GREEN_BITS 5
|
#define PNG_QUANTIZE_GREEN_BITS 5
|
||||||
|
@ -202,7 +203,6 @@
|
||||||
#define PNG_USER_CHUNK_MALLOC_MAX 8000000
|
#define PNG_USER_CHUNK_MALLOC_MAX 8000000
|
||||||
#define PNG_USER_HEIGHT_MAX 1000000
|
#define PNG_USER_HEIGHT_MAX 1000000
|
||||||
#define PNG_USER_WIDTH_MAX 1000000
|
#define PNG_USER_WIDTH_MAX 1000000
|
||||||
#define PNG_WEIGHT_SHIFT 8
|
|
||||||
#define PNG_ZBUF_SIZE 8192
|
#define PNG_ZBUF_SIZE 8192
|
||||||
#define PNG_ZLIB_VERNUM 0 /* unknown */
|
#define PNG_ZLIB_VERNUM 0 /* unknown */
|
||||||
#define PNG_Z_DEFAULT_COMPRESSION (-1)
|
#define PNG_Z_DEFAULT_COMPRESSION (-1)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* 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.15 [November 20, 2014]
|
||||||
* Copyright (c) 1998-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014 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,6 +77,9 @@ png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
|
||||||
PNG_UNUSED(png_ptr)
|
PNG_UNUSED(png_ptr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Some compilers complain that this is always true. However, it
|
||||||
|
* can be false when integer overflow happens.
|
||||||
|
*/
|
||||||
if (size > 0 && size <= PNG_SIZE_MAX
|
if (size > 0 && size <= PNG_SIZE_MAX
|
||||||
# ifdef PNG_MAX_MALLOC_64K
|
# ifdef PNG_MAX_MALLOC_64K
|
||||||
&& size <= 65536U
|
&& size <= 65536U
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngpread.c - read a png file in push mode
|
/* pngpread.c - read a png file in push mode
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
#define PNG_READ_SIG_MODE 0
|
#define PNG_READ_SIG_MODE 0
|
||||||
#define PNG_READ_CHUNK_MODE 1
|
#define PNG_READ_CHUNK_MODE 1
|
||||||
#define PNG_READ_IDAT_MODE 2
|
#define PNG_READ_IDAT_MODE 2
|
||||||
#define PNG_SKIP_MODE 3
|
|
||||||
#define PNG_READ_tEXt_MODE 4
|
#define PNG_READ_tEXt_MODE 4
|
||||||
#define PNG_READ_zTXt_MODE 5
|
#define PNG_READ_zTXt_MODE 5
|
||||||
#define PNG_READ_DONE_MODE 6
|
#define PNG_READ_DONE_MODE 6
|
||||||
|
@ -78,32 +77,14 @@ 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)
|
||||||
{
|
{
|
||||||
png_uint_32 remaining = 0;
|
/* TODO: Deprecate and remove this API.
|
||||||
|
* Somewhere the implementation of this seems to have been lost,
|
||||||
if (png_ptr != NULL && png_ptr->process_mode == PNG_SKIP_MODE &&
|
* or abandoned. It was only to support some internal back-door access
|
||||||
png_ptr->skip_length > 0)
|
* to png_struct) in libpng-1.4.x.
|
||||||
{
|
|
||||||
/* At the end of png_process_data the buffer size must be 0 (see the loop
|
|
||||||
* above) so we can detect a broken call here:
|
|
||||||
*/
|
*/
|
||||||
if (png_ptr->buffer_size != 0)
|
png_app_warning(png_ptr,
|
||||||
png_error(png_ptr,
|
"png_process_data_skip is not implemented in any current version of libpng");
|
||||||
"png_process_data_skip called inside png_process_data");
|
return 0;
|
||||||
|
|
||||||
/* If is impossible for there to be a saved buffer at this point -
|
|
||||||
* otherwise we could not be in SKIP mode. This will also happen if
|
|
||||||
* png_process_skip is called inside png_process_data (but only very
|
|
||||||
* rarely.)
|
|
||||||
*/
|
|
||||||
if (png_ptr->save_buffer_size != 0)
|
|
||||||
png_error(png_ptr, "png_process_data_skip called with saved data");
|
|
||||||
|
|
||||||
remaining = png_ptr->skip_length;
|
|
||||||
png_ptr->skip_length = 0;
|
|
||||||
png_ptr->process_mode = PNG_READ_CHUNK_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return remaining;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* What we do with the incoming data depends on what we were previously
|
/* What we do with the incoming data depends on what we were previously
|
||||||
|
@ -135,12 +116,6 @@ png_process_some_data(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case PNG_SKIP_MODE:
|
|
||||||
{
|
|
||||||
png_push_crc_finish(png_ptr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
png_ptr->buffer_size = 0;
|
png_ptr->buffer_size = 0;
|
||||||
|
@ -439,69 +414,6 @@ png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
|
png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
|
||||||
}
|
}
|
||||||
|
|
||||||
void /* PRIVATE */
|
|
||||||
png_push_crc_skip(png_structrp png_ptr, png_uint_32 skip)
|
|
||||||
{
|
|
||||||
png_ptr->process_mode = PNG_SKIP_MODE;
|
|
||||||
png_ptr->skip_length = skip;
|
|
||||||
}
|
|
||||||
|
|
||||||
void /* PRIVATE */
|
|
||||||
png_push_crc_finish(png_structrp png_ptr)
|
|
||||||
{
|
|
||||||
if (png_ptr->skip_length != 0 && png_ptr->save_buffer_size != 0)
|
|
||||||
{
|
|
||||||
png_size_t save_size = png_ptr->save_buffer_size;
|
|
||||||
png_uint_32 skip_length = png_ptr->skip_length;
|
|
||||||
|
|
||||||
/* We want the smaller of 'skip_length' and 'save_buffer_size', but
|
|
||||||
* they are of different types and we don't know which variable has the
|
|
||||||
* fewest bits. Carefully select the smaller and cast it to the type of
|
|
||||||
* the larger - this cannot overflow. Do not cast in the following test
|
|
||||||
* - it will break on either 16 or 64 bit platforms.
|
|
||||||
*/
|
|
||||||
if (skip_length < save_size)
|
|
||||||
save_size = (png_size_t)skip_length;
|
|
||||||
|
|
||||||
else
|
|
||||||
skip_length = (png_uint_32)save_size;
|
|
||||||
|
|
||||||
png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
|
|
||||||
|
|
||||||
png_ptr->skip_length -= skip_length;
|
|
||||||
png_ptr->buffer_size -= save_size;
|
|
||||||
png_ptr->save_buffer_size -= save_size;
|
|
||||||
png_ptr->save_buffer_ptr += save_size;
|
|
||||||
}
|
|
||||||
if (png_ptr->skip_length != 0 && png_ptr->current_buffer_size != 0)
|
|
||||||
{
|
|
||||||
png_size_t save_size = png_ptr->current_buffer_size;
|
|
||||||
png_uint_32 skip_length = png_ptr->skip_length;
|
|
||||||
|
|
||||||
/* We want the smaller of 'skip_length' and 'current_buffer_size', here,
|
|
||||||
* the same problem exists as above and the same solution.
|
|
||||||
*/
|
|
||||||
if (skip_length < save_size)
|
|
||||||
save_size = (png_size_t)skip_length;
|
|
||||||
|
|
||||||
else
|
|
||||||
skip_length = (png_uint_32)save_size;
|
|
||||||
|
|
||||||
png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
|
|
||||||
|
|
||||||
png_ptr->skip_length -= skip_length;
|
|
||||||
png_ptr->buffer_size -= save_size;
|
|
||||||
png_ptr->current_buffer_size -= save_size;
|
|
||||||
png_ptr->current_buffer_ptr += save_size;
|
|
||||||
}
|
|
||||||
if (png_ptr->skip_length == 0)
|
|
||||||
{
|
|
||||||
PNG_PUSH_SAVE_BUFFER_IF_LT(4)
|
|
||||||
png_crc_finish(png_ptr, 0);
|
|
||||||
png_ptr->process_mode = PNG_READ_CHUNK_MODE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PNGCBAPI
|
void PNGCBAPI
|
||||||
png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
|
png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
|
||||||
{
|
{
|
||||||
|
@ -584,13 +496,11 @@ png_push_save_buffer(png_structrp png_ptr)
|
||||||
if (png_ptr->save_buffer == NULL)
|
if (png_ptr->save_buffer == NULL)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, old_buffer);
|
png_free(png_ptr, old_buffer);
|
||||||
old_buffer = NULL;
|
|
||||||
png_error(png_ptr, "Insufficient memory for save_buffer");
|
png_error(png_ptr, "Insufficient memory for save_buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
||||||
png_free(png_ptr, old_buffer);
|
png_free(png_ptr, old_buffer);
|
||||||
old_buffer = NULL;
|
|
||||||
png_ptr->save_buffer_max = new_max;
|
png_ptr->save_buffer_max = new_max;
|
||||||
}
|
}
|
||||||
if (png_ptr->current_buffer_size)
|
if (png_ptr->current_buffer_size)
|
||||||
|
@ -653,7 +563,7 @@ png_push_read_IDAT(png_structrp png_ptr)
|
||||||
* are of different types and we don't know which variable has the fewest
|
* are of different types and we don't know which variable has the fewest
|
||||||
* bits. Carefully select the smaller and cast it to the type of the
|
* bits. Carefully select the smaller and cast it to the type of the
|
||||||
* larger - this cannot overflow. Do not cast in the following test - it
|
* larger - this cannot overflow. Do not cast in the following test - it
|
||||||
* will break on either 16 or 64 bit platforms.
|
* will break on either 16-bit or 64-bit platforms.
|
||||||
*/
|
*/
|
||||||
if (idat_size < save_size)
|
if (idat_size < save_size)
|
||||||
save_size = (png_size_t)idat_size;
|
save_size = (png_size_t)idat_size;
|
||||||
|
@ -696,6 +606,7 @@ png_push_read_IDAT(png_structrp png_ptr)
|
||||||
png_ptr->current_buffer_size -= save_size;
|
png_ptr->current_buffer_size -= save_size;
|
||||||
png_ptr->current_buffer_ptr += save_size;
|
png_ptr->current_buffer_ptr += save_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (png_ptr->idat_size == 0)
|
if (png_ptr->idat_size == 0)
|
||||||
{
|
{
|
||||||
PNG_PUSH_SAVE_BUFFER_IF_LT(4)
|
PNG_PUSH_SAVE_BUFFER_IF_LT(4)
|
||||||
|
@ -751,7 +662,7 @@ png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
|
||||||
* change the current behavior (see comments in inflate.c
|
* change the current behavior (see comments in inflate.c
|
||||||
* for why this doesn't happen at present with zlib 1.2.5).
|
* for why this doesn't happen at present with zlib 1.2.5).
|
||||||
*/
|
*/
|
||||||
ret = inflate(&png_ptr->zstream, Z_SYNC_FLUSH);
|
ret = PNG_INFLATE(png_ptr, Z_SYNC_FLUSH);
|
||||||
|
|
||||||
/* Check for any failure before proceeding. */
|
/* Check for any failure before proceeding. */
|
||||||
if (ret != Z_OK && ret != Z_STREAM_END)
|
if (ret != Z_OK && ret != Z_STREAM_END)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngpriv.h - private declarations for use inside libpng
|
/* pngpriv.h - private declarations for use inside libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.21 [January 15, 2016]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -118,8 +118,12 @@
|
||||||
* to compile with an appropriate #error if ALIGNED_MEMORY has been turned
|
* to compile with an appropriate #error if ALIGNED_MEMORY has been turned
|
||||||
* off.
|
* off.
|
||||||
*
|
*
|
||||||
* Note that gcc-4.9 defines __ARM_NEON instead of __ARM_NEON__, so we
|
* Note that gcc-4.9 defines __ARM_NEON instead of the deprecated
|
||||||
* check both variants.
|
* __ARM_NEON__, so we check both variants.
|
||||||
|
*
|
||||||
|
* To disable ARM_NEON optimizations entirely, and skip compiling the
|
||||||
|
* associated assembler code, pass --enable-arm-neon=no to configure
|
||||||
|
* or put -DPNG_ARM_NEON_OPT=0 in CPPFLAGS.
|
||||||
*/
|
*/
|
||||||
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
|
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
|
||||||
defined(PNG_ALIGNED_MEMORY_SUPPORTED)
|
defined(PNG_ALIGNED_MEMORY_SUPPORTED)
|
||||||
|
@ -248,17 +252,18 @@
|
||||||
* always be used to declare an extern data or function object in this file.
|
* always be used to declare an extern data or function object in this file.
|
||||||
*/
|
*/
|
||||||
#ifndef PNG_INTERNAL_DATA
|
#ifndef PNG_INTERNAL_DATA
|
||||||
# define PNG_INTERNAL_DATA(type, name, array) extern type name array
|
# define PNG_INTERNAL_DATA(type, name, array) PNG_LINKAGE_DATA type name array
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_INTERNAL_FUNCTION
|
#ifndef PNG_INTERNAL_FUNCTION
|
||||||
# define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
|
# define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
|
||||||
extern PNG_FUNCTION(type, name, args, PNG_EMPTY attributes)
|
PNG_LINKAGE_FUNCTION PNG_FUNCTION(type, name, args, PNG_EMPTY attributes)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PNG_INTERNAL_CALLBACK
|
#ifndef PNG_INTERNAL_CALLBACK
|
||||||
# define PNG_INTERNAL_CALLBACK(type, name, args, attributes)\
|
# define PNG_INTERNAL_CALLBACK(type, name, args, attributes)\
|
||||||
extern PNG_FUNCTION(type, (PNGCBAPI name), args, PNG_EMPTY attributes)
|
PNG_LINKAGE_CALLBACK PNG_FUNCTION(type, (PNGCBAPI name), args,\
|
||||||
|
PNG_EMPTY attributes)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* If floating or fixed point APIs are disabled they may still be compiled
|
/* If floating or fixed point APIs are disabled they may still be compiled
|
||||||
|
@ -296,6 +301,22 @@
|
||||||
# define PNG_DLL_EXPORT
|
# define PNG_DLL_EXPORT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* This is a global switch to set the compilation for an installed system
|
||||||
|
* (a release build). It can be set for testing debug builds to ensure that
|
||||||
|
* they will compile when the build type is switched to RC or STABLE, the
|
||||||
|
* default is just to use PNG_LIBPNG_BUILD_BASE_TYPE. Set this in CPPFLAGS
|
||||||
|
* with either:
|
||||||
|
*
|
||||||
|
* -DPNG_RELEASE_BUILD Turns on the release compile path
|
||||||
|
* -DPNG_RELEASE_BUILD=0 Turns it off
|
||||||
|
* or in your pngusr.h with
|
||||||
|
* #define PNG_RELEASE_BUILD=1 Turns on the release compile path
|
||||||
|
* #define PNG_RELEASE_BUILD=0 Turns it off
|
||||||
|
*/
|
||||||
|
#ifndef PNG_RELEASE_BUILD
|
||||||
|
# define PNG_RELEASE_BUILD (PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* SECURITY and SAFETY:
|
/* SECURITY and SAFETY:
|
||||||
*
|
*
|
||||||
* libpng is built with support for internal limits on image dimensions and
|
* libpng is built with support for internal limits on image dimensions and
|
||||||
|
@ -554,10 +575,6 @@
|
||||||
#define PNG_STRUCT_PNG 0x0001
|
#define PNG_STRUCT_PNG 0x0001
|
||||||
#define PNG_STRUCT_INFO 0x0002
|
#define PNG_STRUCT_INFO 0x0002
|
||||||
|
|
||||||
/* Scaling factor for filter heuristic weighting calculations */
|
|
||||||
#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
|
|
||||||
#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
|
|
||||||
|
|
||||||
/* Flags for the png_ptr->flags rather than declaring a byte for each one */
|
/* Flags for the png_ptr->flags rather than declaring a byte for each one */
|
||||||
#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001
|
#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001
|
||||||
#define PNG_FLAG_ZSTREAM_INITIALIZED 0x0002 /* Added to libpng-1.6.0 */
|
#define PNG_FLAG_ZSTREAM_INITIALIZED 0x0002 /* Added to libpng-1.6.0 */
|
||||||
|
@ -648,7 +665,7 @@
|
||||||
/* The fixed point conversion performs range checking and evaluates
|
/* The fixed point conversion performs range checking and evaluates
|
||||||
* its argument multiple times, so must be used with care. The
|
* its argument multiple times, so must be used with care. The
|
||||||
* range checking uses the PNG specification values for a signed
|
* range checking uses the PNG specification values for a signed
|
||||||
* 32 bit fixed point value except that the values are deliberately
|
* 32-bit fixed point value except that the values are deliberately
|
||||||
* rounded-to-zero to an integral value - 21474 (21474.83 is roughly
|
* rounded-to-zero to an integral value - 21474 (21474.83 is roughly
|
||||||
* (2^31-1) * 100000). 's' is a string that describes the value being
|
* (2^31-1) * 100000). 's' is a string that describes the value being
|
||||||
* converted.
|
* converted.
|
||||||
|
@ -795,7 +812,7 @@
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is used for 16 bit gamma tables -- only the top level pointers are
|
/* This is used for 16-bit gamma tables -- only the top level pointers are
|
||||||
* const; this could be changed:
|
* const; this could be changed:
|
||||||
*/
|
*/
|
||||||
typedef const png_uint_16p * png_const_uint_16pp;
|
typedef const png_uint_16p * png_const_uint_16pp;
|
||||||
|
@ -1198,6 +1215,14 @@ PNG_INTERNAL_FUNCTION(void,png_read_finish_row,(png_structrp png_ptr),
|
||||||
/* Initialize the row buffers, etc. */
|
/* Initialize the row buffers, etc. */
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_start_row,(png_structrp png_ptr),PNG_EMPTY);
|
PNG_INTERNAL_FUNCTION(void,png_read_start_row,(png_structrp png_ptr),PNG_EMPTY);
|
||||||
|
|
||||||
|
#if PNG_ZLIB_VERNUM >= 0x1240
|
||||||
|
PNG_INTERNAL_FUNCTION(int,png_zlib_inflate,(png_structrp png_ptr, int flush),
|
||||||
|
PNG_EMPTY);
|
||||||
|
# define PNG_INFLATE(pp, flush) png_zlib_inflate(pp, flush)
|
||||||
|
#else /* Zlib < 1.2.4 */
|
||||||
|
# define PNG_INFLATE(pp, flush) inflate(&(pp)->zstream, flush)
|
||||||
|
#endif /* Zlib < 1.2.4 */
|
||||||
|
|
||||||
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
/* Optional call to update the users info structure */
|
/* Optional call to update the users info structure */
|
||||||
PNG_INTERNAL_FUNCTION(void,png_read_transform_info,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_read_transform_info,(png_structrp png_ptr,
|
||||||
|
@ -1372,10 +1397,6 @@ PNG_INTERNAL_FUNCTION(void,png_push_read_chunk,(png_structrp png_ptr,
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_read_sig,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_push_read_sig,(png_structrp png_ptr,
|
||||||
png_inforp info_ptr),PNG_EMPTY);
|
png_inforp info_ptr),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_check_crc,(png_structrp png_ptr),PNG_EMPTY);
|
PNG_INTERNAL_FUNCTION(void,png_push_check_crc,(png_structrp png_ptr),PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_crc_skip,(png_structrp png_ptr,
|
|
||||||
png_uint_32 length),PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_crc_finish,(png_structrp png_ptr),
|
|
||||||
PNG_EMPTY);
|
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_save_buffer,(png_structrp png_ptr),
|
PNG_INTERNAL_FUNCTION(void,png_push_save_buffer,(png_structrp png_ptr),
|
||||||
PNG_EMPTY);
|
PNG_EMPTY);
|
||||||
PNG_INTERNAL_FUNCTION(void,png_push_restore_buffer,(png_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(void,png_push_restore_buffer,(png_structrp png_ptr,
|
||||||
|
@ -1896,6 +1917,9 @@ 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
|
||||||
|
|
||||||
|
PNG_INTERNAL_FUNCTION(png_uint_32, png_check_keyword, (png_structrp png_ptr,
|
||||||
|
png_const_charp key, png_bytep new_key), PNG_EMPTY);
|
||||||
|
|
||||||
/* Maintainer: Put new private prototypes here ^ */
|
/* Maintainer: Put new private prototypes here ^ */
|
||||||
|
|
||||||
#include "pngdebug.h"
|
#include "pngdebug.h"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.17 [March 26, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -63,7 +63,7 @@ png_create_read_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
|
||||||
/* In stable builds only warn if an application error can be completely
|
/* In stable builds only warn if an application error can be completely
|
||||||
* handled.
|
* handled.
|
||||||
*/
|
*/
|
||||||
# if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
|
# if PNG_RELEASE_BUILD
|
||||||
png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
|
png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
@ -1683,10 +1683,11 @@ decode_gamma(png_image_read_control *display, png_uint_32 value, int encoding)
|
||||||
value *= 257;
|
value *= 257;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#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)");
|
||||||
break;
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
|
@ -2837,7 +2838,6 @@ png_image_read_colormap(png_voidp argument)
|
||||||
default:
|
default:
|
||||||
png_error(png_ptr, "invalid PNG color type");
|
png_error(png_ptr, "invalid PNG color type");
|
||||||
/*NOT REACHED*/
|
/*NOT REACHED*/
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now deal with the output processing */
|
/* Now deal with the output processing */
|
||||||
|
@ -2847,10 +2847,6 @@ png_image_read_colormap(png_voidp argument)
|
||||||
|
|
||||||
switch (data_encoding)
|
switch (data_encoding)
|
||||||
{
|
{
|
||||||
default:
|
|
||||||
png_error(png_ptr, "bad data option (internal error)");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case P_sRGB:
|
case P_sRGB:
|
||||||
/* Change to 8-bit sRGB */
|
/* Change to 8-bit sRGB */
|
||||||
png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, PNG_GAMMA_sRGB);
|
png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, PNG_GAMMA_sRGB);
|
||||||
|
@ -2860,6 +2856,11 @@ png_image_read_colormap(png_voidp argument)
|
||||||
if (png_ptr->bit_depth > 8)
|
if (png_ptr->bit_depth > 8)
|
||||||
png_set_scale_16(png_ptr);
|
png_set_scale_16(png_ptr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
default:
|
||||||
|
png_error(png_ptr, "bad data option (internal error)");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmap_entries > 256 || cmap_entries > image->colormap_entries)
|
if (cmap_entries > 256 || cmap_entries > image->colormap_entries)
|
||||||
|
@ -3410,10 +3411,6 @@ png_image_read_background(png_voidp argument)
|
||||||
*/
|
*/
|
||||||
switch (info_ptr->bit_depth)
|
switch (info_ptr->bit_depth)
|
||||||
{
|
{
|
||||||
default:
|
|
||||||
png_error(png_ptr, "unexpected bit depth");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
/* 8-bit sRGB gray values with an alpha channel; the alpha channel is
|
/* 8-bit sRGB gray values with an alpha channel; the alpha channel is
|
||||||
* to be removed by composing on a background: either the row if
|
* to be removed by composing on a background: either the row if
|
||||||
|
@ -3631,6 +3628,11 @@ png_image_read_background(png_voidp argument)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
default:
|
||||||
|
png_error(png_ptr, "unexpected bit depth");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* 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.17 [March 26, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
* reads from a file pointer. Note that this routine sometimes gets called
|
* reads from a file pointer. Note that this routine sometimes gets called
|
||||||
* with very small lengths, so you should implement some kind of simple
|
* with very small lengths, so you should implement some kind of simple
|
||||||
* buffering if you are using unbuffered reads. This should never be asked
|
* buffering if you are using unbuffered reads. This should never be asked
|
||||||
* to read more than 64K on a 16 bit machine.
|
* to read more than 64K on a 16-bit machine.
|
||||||
*/
|
*/
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
|
png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -976,7 +976,6 @@ png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
|
||||||
|
|
||||||
default:
|
default:
|
||||||
png_error(png_ptr, "invalid error action to rgb_to_gray");
|
png_error(png_ptr, "invalid error action to rgb_to_gray");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
@ -1997,7 +1996,7 @@ png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# else
|
# else
|
||||||
/* No 16 bit support: force chopping 16-bit input down to 8, in this case
|
/* No 16-bit support: force chopping 16-bit input down to 8, in this case
|
||||||
* the app program can chose if both APIs are available by setting the
|
* the app program can chose if both APIs are available by setting the
|
||||||
* correct scaling to use.
|
* correct scaling to use.
|
||||||
*/
|
*/
|
||||||
|
@ -2098,10 +2097,10 @@ png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
|
defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
|
||||||
if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
|
if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
|
||||||
{
|
{
|
||||||
if (info_ptr->bit_depth < png_ptr->user_transform_depth)
|
if (png_ptr->user_transform_depth != 0)
|
||||||
info_ptr->bit_depth = png_ptr->user_transform_depth;
|
info_ptr->bit_depth = png_ptr->user_transform_depth;
|
||||||
|
|
||||||
if (info_ptr->channels < png_ptr->user_transform_channels)
|
if (png_ptr->user_transform_channels != 0)
|
||||||
info_ptr->channels = png_ptr->user_transform_channels;
|
info_ptr->channels = png_ptr->user_transform_channels;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2382,8 +2381,8 @@ png_do_scale_16_to_8(png_row_infop row_info, png_bytep row)
|
||||||
|
|
||||||
while (sp < ep)
|
while (sp < ep)
|
||||||
{
|
{
|
||||||
/* The input is an array of 16 bit components, these must be scaled to
|
/* The input is an array of 16-bit components, these must be scaled to
|
||||||
* 8 bits each. For a 16 bit value V the required value (from the PNG
|
* 8 bits each. For a 16-bit value V the required value (from the PNG
|
||||||
* specification) is:
|
* specification) is:
|
||||||
*
|
*
|
||||||
* (V * 255) / 65535
|
* (V * 255) / 65535
|
||||||
|
@ -2404,7 +2403,7 @@ png_do_scale_16_to_8(png_row_infop row_info, png_bytep row)
|
||||||
*
|
*
|
||||||
* The approximate differs from the exact answer only when (vlo-vhi) is
|
* The approximate differs from the exact answer only when (vlo-vhi) is
|
||||||
* 128; it then gives a correction of +1 when the exact correction is
|
* 128; it then gives a correction of +1 when the exact correction is
|
||||||
* 0. This gives 128 errors. The exact answer (correct for all 16 bit
|
* 0. This gives 128 errors. The exact answer (correct for all 16-bit
|
||||||
* input values) is:
|
* input values) is:
|
||||||
*
|
*
|
||||||
* error = (vlo-vhi+128)*65535 >> 24;
|
* error = (vlo-vhi+128)*65535 >> 24;
|
||||||
|
@ -3148,9 +3147,9 @@ png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
|
||||||
if (red != green || red != blue)
|
if (red != green || red != blue)
|
||||||
rgb_error |= 1;
|
rgb_error |= 1;
|
||||||
|
|
||||||
/* From 1.5.5 in the 16 bit case do the accurate conversion even
|
/* From 1.5.5 in the 16-bit case do the accurate conversion even
|
||||||
* in the 'fast' case - this is because this is where the code
|
* in the 'fast' case - this is because this is where the code
|
||||||
* ends up when handling linear 16 bit data.
|
* ends up when handling linear 16-bit data.
|
||||||
*/
|
*/
|
||||||
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue + 16384) >>
|
gray16 = (png_uint_16)((rc*red + gc*green + bc*blue + 16384) >>
|
||||||
15);
|
15);
|
||||||
|
@ -3315,7 +3314,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
||||||
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
||||||
== png_ptr->trans_color.gray)
|
== png_ptr->trans_color.gray)
|
||||||
{
|
{
|
||||||
unsigned int tmp = *sp & (0xf0f >> (4 - shift));
|
unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
|
||||||
tmp |= png_ptr->background.gray << shift;
|
tmp |= png_ptr->background.gray << shift;
|
||||||
*sp = (png_byte)(tmp & 0xff);
|
*sp = (png_byte)(tmp & 0xff);
|
||||||
}
|
}
|
||||||
|
@ -3325,7 +3324,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
||||||
unsigned int p = (*sp >> shift) & 0x0f;
|
unsigned int p = (*sp >> shift) & 0x0f;
|
||||||
unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
|
unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
|
||||||
0x0f;
|
0x0f;
|
||||||
unsigned int tmp = *sp & (0xf0f >> (4 - shift));
|
unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
|
||||||
tmp |= g << shift;
|
tmp |= g << shift;
|
||||||
*sp = (png_byte)(tmp & 0xff);
|
*sp = (png_byte)(tmp & 0xff);
|
||||||
}
|
}
|
||||||
|
@ -3351,7 +3350,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
|
||||||
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
if ((png_uint_16)((*sp >> shift) & 0x0f)
|
||||||
== png_ptr->trans_color.gray)
|
== png_ptr->trans_color.gray)
|
||||||
{
|
{
|
||||||
unsigned int tmp = *sp & (0xf0f >> (4 - shift));
|
unsigned int tmp = *sp & (0x0f0f >> (4 - shift));
|
||||||
tmp |= png_ptr->background.gray << shift;
|
tmp |= png_ptr->background.gray << shift;
|
||||||
*sp = (png_byte)(tmp & 0xff);
|
*sp = (png_byte)(tmp & 0xff);
|
||||||
}
|
}
|
||||||
|
@ -4460,7 +4459,7 @@ png_do_expand(png_row_infop row_info, png_bytep row,
|
||||||
|
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if (*sp == gray)
|
if ((*sp & 0xffU) == gray)
|
||||||
*dp-- = 0;
|
*dp-- = 0;
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -4478,7 +4477,8 @@ png_do_expand(png_row_infop row_info, png_bytep row,
|
||||||
dp = row + (row_info->rowbytes << 1) - 1;
|
dp = row + (row_info->rowbytes << 1) - 1;
|
||||||
for (i = 0; i < row_width; i++)
|
for (i = 0; i < row_width; i++)
|
||||||
{
|
{
|
||||||
if (*(sp - 1) == gray_high && *(sp) == gray_low)
|
if ((*(sp - 1) & 0xffU) == gray_high &&
|
||||||
|
(*(sp) & 0xffU) == gray_low)
|
||||||
{
|
{
|
||||||
*dp-- = 0;
|
*dp-- = 0;
|
||||||
*dp-- = 0;
|
*dp-- = 0;
|
||||||
|
|
|
@ -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.17 [March 26, 2015]
|
* Last changed in libpng 1.6.20 [December 3, 2014]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -89,7 +89,13 @@ png_get_int_32)(png_const_bytep buf)
|
||||||
return uval;
|
return uval;
|
||||||
|
|
||||||
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 */
|
||||||
return -(png_int_32)uval;
|
return -(png_int_32)uval;
|
||||||
|
/* The following has to be safe; this function only gets called on PNG data
|
||||||
|
* and if we get here that data is invalid. 0 is the most safe value and
|
||||||
|
* if not then an attacker would surely just generate a PNG with 0 instead.
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */
|
/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */
|
||||||
|
@ -98,7 +104,7 @@ png_get_uint_16)(png_const_bytep buf)
|
||||||
{
|
{
|
||||||
/* ANSI-C requires an int value to accomodate at least 16 bits so this
|
/* ANSI-C requires an int value to accomodate at least 16 bits so this
|
||||||
* works and allows the compiler not to worry about possible narrowing
|
* works and allows the compiler not to worry about possible narrowing
|
||||||
* on 32 bit systems. (Pre-ANSI systems did not make integers smaller
|
* on 32-bit systems. (Pre-ANSI systems did not make integers smaller
|
||||||
* than 16 bits either.)
|
* than 16 bits either.)
|
||||||
*/
|
*/
|
||||||
unsigned int val =
|
unsigned int val =
|
||||||
|
@ -341,7 +347,7 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
|
||||||
* are minimal.
|
* are minimal.
|
||||||
*/
|
*/
|
||||||
(void)png_safecat(msg, (sizeof msg), 4, " using zstream");
|
(void)png_safecat(msg, (sizeof msg), 4, " using zstream");
|
||||||
#if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
|
#if PNG_RELEASE_BUILD
|
||||||
png_chunk_warning(png_ptr, msg);
|
png_chunk_warning(png_ptr, msg);
|
||||||
png_ptr->zowner = 0;
|
png_ptr->zowner = 0;
|
||||||
#else
|
#else
|
||||||
|
@ -371,10 +377,16 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
|
||||||
|
|
||||||
if (((png_ptr->options >> PNG_MAXIMUM_INFLATE_WINDOW) & 3) ==
|
if (((png_ptr->options >> PNG_MAXIMUM_INFLATE_WINDOW) & 3) ==
|
||||||
PNG_OPTION_ON)
|
PNG_OPTION_ON)
|
||||||
|
{
|
||||||
window_bits = 15;
|
window_bits = 15;
|
||||||
|
png_ptr->zstream_start = 0; /* fixed window size */
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
window_bits = 0;
|
window_bits = 0;
|
||||||
|
png_ptr->zstream_start = 1;
|
||||||
|
}
|
||||||
# else
|
# else
|
||||||
# define window_bits 0
|
# define window_bits 0
|
||||||
# endif
|
# endif
|
||||||
|
@ -423,6 +435,31 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if PNG_ZLIB_VERNUM >= 0x1240
|
||||||
|
/* Handle the start of the inflate stream if we called inflateInit2(strm,0);
|
||||||
|
* in this case some zlib versions skip validation of the CINFO field and, in
|
||||||
|
* certain circumstances, libpng may end up displaying an invalid image, in
|
||||||
|
* contrast to implementations that call zlib in the normal way (e.g. libpng
|
||||||
|
* 1.5).
|
||||||
|
*/
|
||||||
|
int /* PRIVATE */
|
||||||
|
png_zlib_inflate(png_structrp png_ptr, int flush)
|
||||||
|
{
|
||||||
|
if (png_ptr->zstream_start && png_ptr->zstream.avail_in > 0)
|
||||||
|
{
|
||||||
|
if ((*png_ptr->zstream.next_in >> 4) > 7)
|
||||||
|
{
|
||||||
|
png_ptr->zstream.msg = "invalid window size (libpng)";
|
||||||
|
return Z_DATA_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->zstream_start = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return inflate(&png_ptr->zstream, flush);
|
||||||
|
}
|
||||||
|
#endif /* Zlib >= 1.2.4 */
|
||||||
|
|
||||||
#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
||||||
/* png_inflate now returns zlib error codes including Z_OK and Z_STREAM_END to
|
/* png_inflate now returns zlib error codes including Z_OK and Z_STREAM_END to
|
||||||
* allow the caller to do multiple calls if required. If the 'finish' flag is
|
* allow the caller to do multiple calls if required. If the 'finish' flag is
|
||||||
|
@ -516,7 +553,7 @@ png_inflate(png_structrp png_ptr, png_uint_32 owner, int finish,
|
||||||
* the previous chunk of input data. Tell zlib if we have reached the
|
* the previous chunk of input data. Tell zlib if we have reached the
|
||||||
* end of the output buffer.
|
* end of the output buffer.
|
||||||
*/
|
*/
|
||||||
ret = inflate(&png_ptr->zstream, avail_out > 0 ? Z_NO_FLUSH :
|
ret = PNG_INFLATE(png_ptr, avail_out > 0 ? Z_NO_FLUSH :
|
||||||
(finish ? Z_FINISH : Z_SYNC_FLUSH));
|
(finish ? Z_FINISH : Z_SYNC_FLUSH));
|
||||||
} while (ret == Z_OK);
|
} while (ret == Z_OK);
|
||||||
|
|
||||||
|
@ -575,7 +612,7 @@ png_decompress_chunk(png_structrp png_ptr,
|
||||||
*/
|
*/
|
||||||
png_alloc_size_t limit = PNG_SIZE_MAX;
|
png_alloc_size_t limit = PNG_SIZE_MAX;
|
||||||
|
|
||||||
# ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
|
# ifdef PNG_SET_USER_LIMITS_SUPPORTED
|
||||||
if (png_ptr->user_chunk_malloc_max > 0 &&
|
if (png_ptr->user_chunk_malloc_max > 0 &&
|
||||||
png_ptr->user_chunk_malloc_max < limit)
|
png_ptr->user_chunk_malloc_max < limit)
|
||||||
limit = png_ptr->user_chunk_malloc_max;
|
limit = png_ptr->user_chunk_malloc_max;
|
||||||
|
@ -670,7 +707,6 @@ png_decompress_chunk(png_structrp png_ptr,
|
||||||
* success)
|
* success)
|
||||||
*/
|
*/
|
||||||
png_free(png_ptr, text);
|
png_free(png_ptr, text);
|
||||||
text = NULL;
|
|
||||||
|
|
||||||
/* This really is very benign, but it's still an error because
|
/* This really is very benign, but it's still an error because
|
||||||
* the extra space may otherwise be used as a Trojan Horse.
|
* the extra space may otherwise be used as a Trojan Horse.
|
||||||
|
@ -766,7 +802,7 @@ 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 = inflate(&png_ptr->zstream,
|
ret = PNG_INFLATE(png_ptr,
|
||||||
*chunk_bytes > 0 ? Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
|
*chunk_bytes > 0 ? 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));
|
||||||
|
@ -867,7 +903,7 @@ void /* PRIVATE */
|
||||||
png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
{
|
{
|
||||||
png_color palette[PNG_MAX_PALETTE_LENGTH];
|
png_color palette[PNG_MAX_PALETTE_LENGTH];
|
||||||
int num, i;
|
int max_palette_length, num, i;
|
||||||
#ifdef PNG_POINTER_INDEXING_SUPPORTED
|
#ifdef PNG_POINTER_INDEXING_SUPPORTED
|
||||||
png_colorp pal_ptr;
|
png_colorp pal_ptr;
|
||||||
#endif
|
#endif
|
||||||
|
@ -928,6 +964,19 @@ png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
/* The cast is safe because 'length' is less than 3*PNG_MAX_PALETTE_LENGTH */
|
/* The cast is safe because 'length' is less than 3*PNG_MAX_PALETTE_LENGTH */
|
||||||
num = (int)length / 3;
|
num = (int)length / 3;
|
||||||
|
|
||||||
|
/* If the palette has 256 or fewer entries but is too large for the bit
|
||||||
|
* depth, we don't issue an error, to preserve the behavior of previous
|
||||||
|
* libpng versions. We silently truncate the unused extra palette entries
|
||||||
|
* here.
|
||||||
|
*/
|
||||||
|
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
max_palette_length = (1 << png_ptr->bit_depth);
|
||||||
|
else
|
||||||
|
max_palette_length = PNG_MAX_PALETTE_LENGTH;
|
||||||
|
|
||||||
|
if (num > max_palette_length)
|
||||||
|
num = max_palette_length;
|
||||||
|
|
||||||
#ifdef PNG_POINTER_INDEXING_SUPPORTED
|
#ifdef PNG_POINTER_INDEXING_SUPPORTED
|
||||||
for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
|
for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
|
||||||
{
|
{
|
||||||
|
@ -960,7 +1009,7 @@ png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
png_crc_finish(png_ptr, 0);
|
png_crc_finish(png_ptr, (int) length - num * 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PNG_READ_OPT_PLTE_SUPPORTED
|
#ifndef PNG_READ_OPT_PLTE_SUPPORTED
|
||||||
|
@ -1147,11 +1196,13 @@ png_handle_sBIT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i=0; i<truelen; ++i)
|
for (i=0; i<truelen; ++i)
|
||||||
|
{
|
||||||
if (buf[i] == 0 || buf[i] > sample_depth)
|
if (buf[i] == 0 || buf[i] > sample_depth)
|
||||||
{
|
{
|
||||||
png_chunk_benign_error(png_ptr, "invalid");
|
png_chunk_benign_error(png_ptr, "invalid");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
|
if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
|
||||||
{
|
{
|
||||||
|
@ -1650,7 +1701,7 @@ png_handle_sPLT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
++entry_start;
|
++entry_start;
|
||||||
|
|
||||||
/* A sample depth should follow the separator, and we should be on it */
|
/* A sample depth should follow the separator, and we should be on it */
|
||||||
if (entry_start > buffer + length - 2)
|
if (length < 2U || entry_start > buffer + (length - 2U))
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "malformed sPLT chunk");
|
png_warning(png_ptr, "malformed sPLT chunk");
|
||||||
return;
|
return;
|
||||||
|
@ -1817,7 +1868,8 @@ png_handle_tRNS(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length > png_ptr->num_palette || length > PNG_MAX_PALETTE_LENGTH ||
|
if (length > (unsigned int) png_ptr->num_palette ||
|
||||||
|
length > (unsigned int) PNG_MAX_PALETTE_LENGTH ||
|
||||||
length == 0)
|
length == 0)
|
||||||
{
|
{
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
|
@ -1980,7 +2032,8 @@ png_handle_hIST(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
|
|
||||||
num = length / 2 ;
|
num = length / 2 ;
|
||||||
|
|
||||||
if (num != png_ptr->num_palette || num > PNG_MAX_PALETTE_LENGTH)
|
if (num != (unsigned int) png_ptr->num_palette ||
|
||||||
|
num > (unsigned int) PNG_MAX_PALETTE_LENGTH)
|
||||||
{
|
{
|
||||||
png_crc_finish(png_ptr, length);
|
png_crc_finish(png_ptr, length);
|
||||||
png_chunk_benign_error(png_ptr, "invalid");
|
png_chunk_benign_error(png_ptr, "invalid");
|
||||||
|
@ -2152,7 +2205,7 @@ png_handle_pCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
||||||
/* We need to have at least 12 bytes after the purpose string
|
/* We need to have at least 12 bytes after the purpose string
|
||||||
* in order to get the parameter information.
|
* in order to get the parameter information.
|
||||||
*/
|
*/
|
||||||
if (endptr <= buf + 12)
|
if (endptr - buf <= 12)
|
||||||
{
|
{
|
||||||
png_chunk_benign_error(png_ptr, "invalid");
|
png_chunk_benign_error(png_ptr, "invalid");
|
||||||
return;
|
return;
|
||||||
|
@ -2715,7 +2768,7 @@ png_cache_unknown_chunk(png_structrp png_ptr, png_uint_32 length)
|
||||||
png_ptr->unknown_chunk.data = NULL;
|
png_ptr->unknown_chunk.data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
|
# ifdef PNG_SET_USER_LIMITS_SUPPORTED
|
||||||
if (png_ptr->user_chunk_malloc_max > 0 &&
|
if (png_ptr->user_chunk_malloc_max > 0 &&
|
||||||
png_ptr->user_chunk_malloc_max < limit)
|
png_ptr->user_chunk_malloc_max < limit)
|
||||||
limit = png_ptr->user_chunk_malloc_max;
|
limit = png_ptr->user_chunk_malloc_max;
|
||||||
|
@ -3812,15 +3865,15 @@ png_read_filter_row_paeth_1byte_pixel(png_row_infop row_info, png_bytep row,
|
||||||
p = b - c;
|
p = b - c;
|
||||||
pc = a - c;
|
pc = a - c;
|
||||||
|
|
||||||
# ifdef PNG_USE_ABS
|
#ifdef PNG_USE_ABS
|
||||||
pa = abs(p);
|
pa = abs(p);
|
||||||
pb = abs(pc);
|
pb = abs(pc);
|
||||||
pc = abs(p + pc);
|
pc = abs(p + pc);
|
||||||
# else
|
#else
|
||||||
pa = p < 0 ? -p : p;
|
pa = p < 0 ? -p : p;
|
||||||
pb = pc < 0 ? -pc : pc;
|
pb = pc < 0 ? -pc : pc;
|
||||||
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
/* Find the best predictor, the least of pa, pb, pc favoring the earlier
|
/* Find the best predictor, the least of pa, pb, pc favoring the earlier
|
||||||
* ones in the case of a tie.
|
* ones in the case of a tie.
|
||||||
|
@ -3867,15 +3920,15 @@ png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row,
|
||||||
p = b - c;
|
p = b - c;
|
||||||
pc = a - c;
|
pc = a - c;
|
||||||
|
|
||||||
# ifdef PNG_USE_ABS
|
#ifdef PNG_USE_ABS
|
||||||
pa = abs(p);
|
pa = abs(p);
|
||||||
pb = abs(pc);
|
pb = abs(pc);
|
||||||
pc = abs(p + pc);
|
pc = abs(p + pc);
|
||||||
# else
|
#else
|
||||||
pa = p < 0 ? -p : p;
|
pa = p < 0 ? -p : p;
|
||||||
pb = pc < 0 ? -pc : pc;
|
pb = pc < 0 ? -pc : pc;
|
||||||
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
if (pb < pa) pa = pb, a = b;
|
if (pb < pa) pa = pb, a = b;
|
||||||
if (pc < pa) a = c;
|
if (pc < pa) a = c;
|
||||||
|
@ -4017,7 +4070,7 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
|
||||||
*
|
*
|
||||||
* TODO: deal more elegantly with truncated IDAT lists.
|
* TODO: deal more elegantly with truncated IDAT lists.
|
||||||
*/
|
*/
|
||||||
ret = inflate(&png_ptr->zstream, Z_NO_FLUSH);
|
ret = PNG_INFLATE(png_ptr, Z_NO_FLUSH);
|
||||||
|
|
||||||
/* Take the unconsumed output back. */
|
/* Take the unconsumed output back. */
|
||||||
if (output != NULL)
|
if (output != NULL)
|
||||||
|
|
|
@ -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.17 [March 26, 2015]
|
* Last changed in libpng 1.6.21 [January 15, 2016]
|
||||||
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
|
* Copyright (c) 1998-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.)
|
||||||
|
@ -123,12 +123,12 @@ png_set_cHRM_XYZ(png_const_structrp png_ptr, png_inforp info_ptr, double red_X,
|
||||||
png_fixed(png_ptr, red_X, "cHRM Red X"),
|
png_fixed(png_ptr, red_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 Red X"),
|
png_fixed(png_ptr, green_X, "cHRM Green X"),
|
||||||
png_fixed(png_ptr, green_Y, "cHRM Red Y"),
|
png_fixed(png_ptr, green_Y, "cHRM Green Y"),
|
||||||
png_fixed(png_ptr, green_Z, "cHRM Red Z"),
|
png_fixed(png_ptr, green_Z, "cHRM Green Z"),
|
||||||
png_fixed(png_ptr, blue_X, "cHRM Red X"),
|
png_fixed(png_ptr, blue_X, "cHRM Blue X"),
|
||||||
png_fixed(png_ptr, blue_Y, "cHRM Red Y"),
|
png_fixed(png_ptr, blue_Y, "cHRM Blue Y"),
|
||||||
png_fixed(png_ptr, blue_Z, "cHRM Red Z"));
|
png_fixed(png_ptr, blue_Z, "cHRM Blue Z"));
|
||||||
}
|
}
|
||||||
# endif /* FLOATING_POINT */
|
# endif /* FLOATING_POINT */
|
||||||
|
|
||||||
|
@ -513,12 +513,17 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
png_const_colorp palette, int num_palette)
|
png_const_colorp palette, int num_palette)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
png_uint_32 max_palette_length;
|
||||||
|
|
||||||
png_debug1(1, "in %s storage function", "PLTE");
|
png_debug1(1, "in %s storage function", "PLTE");
|
||||||
|
|
||||||
if (png_ptr == NULL || info_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
|
max_palette_length = (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
|
||||||
|
(1 << info_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
|
||||||
|
|
||||||
|
if (num_palette < 0 || num_palette > (int) max_palette_length)
|
||||||
{
|
{
|
||||||
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
png_error(png_ptr, "Invalid palette length");
|
png_error(png_ptr, "Invalid palette length");
|
||||||
|
@ -551,8 +556,8 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
|
png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
|
||||||
|
|
||||||
/* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
|
/* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
|
||||||
* of num_palette entries, in case of an invalid PNG file that has
|
* of num_palette entries, in case of an invalid PNG file or incorrect
|
||||||
* too-large sample values.
|
* call to png_set_PLTE() with too-large sample values.
|
||||||
*/
|
*/
|
||||||
png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
|
png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
|
||||||
PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
|
PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
|
||||||
|
@ -673,7 +678,6 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
|
||||||
if (new_iccp_profile == NULL)
|
if (new_iccp_profile == NULL)
|
||||||
{
|
{
|
||||||
png_free(png_ptr, new_iccp_name);
|
png_free(png_ptr, new_iccp_name);
|
||||||
new_iccp_name = NULL;
|
|
||||||
png_benign_error(png_ptr,
|
png_benign_error(png_ptr,
|
||||||
"Insufficient memory to process iCCP profile");
|
"Insufficient memory to process iCCP profile");
|
||||||
|
|
||||||
|
@ -710,7 +714,7 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
png_debug1(1, "in %lx storage function", png_ptr == NULL ? "unexpected" :
|
png_debug1(1, "in %lx storage function", png_ptr == NULL ? 0xabadca11U :
|
||||||
(unsigned long)png_ptr->chunk_name);
|
(unsigned long)png_ptr->chunk_name);
|
||||||
|
|
||||||
if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
|
if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
|
||||||
|
@ -1522,6 +1526,9 @@ png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __COVERITY__
|
#ifndef __COVERITY__
|
||||||
|
/* Some compilers complain that this is always false. However, it
|
||||||
|
* 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,
|
||||||
|
@ -1566,7 +1573,7 @@ png_set_user_limits (png_structrp png_ptr, png_uint_32 user_width_max,
|
||||||
{
|
{
|
||||||
/* Images with dimensions larger than these limits will be
|
/* Images with dimensions larger than these limits will be
|
||||||
* rejected by png_set_IHDR(). To accept any PNG datastream
|
* rejected by png_set_IHDR(). To accept any PNG datastream
|
||||||
* regardless of dimensions, set both limits to 0x7ffffffL.
|
* regardless of dimensions, set both limits to 0x7fffffff.
|
||||||
*/
|
*/
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -1637,4 +1644,88 @@ png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
|
||||||
png_ptr->num_palette_max = -1;
|
png_ptr->num_palette_max = -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_pCAL_SUPPORTED) || \
|
||||||
|
defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
|
||||||
|
/* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification,
|
||||||
|
* and if invalid, correct the keyword rather than discarding the entire
|
||||||
|
* chunk. The PNG 1.0 specification requires keywords 1-79 characters in
|
||||||
|
* length, forbids leading or trailing whitespace, multiple internal spaces,
|
||||||
|
* and the non-break space (0x80) from ISO 8859-1. Returns keyword length.
|
||||||
|
*
|
||||||
|
* The 'new_key' buffer must be 80 characters in size (for the keyword plus a
|
||||||
|
* trailing '\0'). If this routine returns 0 then there was no keyword, or a
|
||||||
|
* valid one could not be generated, and the caller must png_error.
|
||||||
|
*/
|
||||||
|
png_uint_32 /* PRIVATE */
|
||||||
|
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
|
||||||
|
{
|
||||||
|
png_const_charp orig_key = key;
|
||||||
|
png_uint_32 key_len = 0;
|
||||||
|
int bad_character = 0;
|
||||||
|
int space = 1;
|
||||||
|
|
||||||
|
png_debug(1, "in png_check_keyword");
|
||||||
|
|
||||||
|
if (key == NULL)
|
||||||
|
{
|
||||||
|
*new_key = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*key && key_len < 79)
|
||||||
|
{
|
||||||
|
png_byte ch = (png_byte)*key++;
|
||||||
|
|
||||||
|
if ((ch > 32 && ch <= 126) || (ch >= 161 /*&& ch <= 255*/))
|
||||||
|
*new_key++ = ch, ++key_len, space = 0;
|
||||||
|
|
||||||
|
else if (space == 0)
|
||||||
|
{
|
||||||
|
/* A space or an invalid character when one wasn't seen immediately
|
||||||
|
* before; output just a space.
|
||||||
|
*/
|
||||||
|
*new_key++ = 32, ++key_len, space = 1;
|
||||||
|
|
||||||
|
/* If the character was not a space then it is invalid. */
|
||||||
|
if (ch != 32)
|
||||||
|
bad_character = ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (bad_character == 0)
|
||||||
|
bad_character = ch; /* just skip it, record the first error */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key_len > 0 && space != 0) /* trailing space */
|
||||||
|
{
|
||||||
|
--key_len, --new_key;
|
||||||
|
if (bad_character == 0)
|
||||||
|
bad_character = 32;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Terminate the keyword */
|
||||||
|
*new_key = 0;
|
||||||
|
|
||||||
|
if (key_len == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
#ifdef PNG_WARNINGS_SUPPORTED
|
||||||
|
/* Try to only output one warning per keyword: */
|
||||||
|
if (*key != 0) /* keyword too long */
|
||||||
|
png_warning(png_ptr, "keyword truncated");
|
||||||
|
|
||||||
|
else if (bad_character != 0)
|
||||||
|
{
|
||||||
|
PNG_WARNING_PARAMETERS(p)
|
||||||
|
|
||||||
|
png_warning_parameter(p, 1, orig_key);
|
||||||
|
png_warning_parameter_signed(p, 2, PNG_NUMBER_FORMAT_02x, bad_character);
|
||||||
|
|
||||||
|
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
|
||||||
|
}
|
||||||
|
#endif /* WARNINGS */
|
||||||
|
|
||||||
|
return key_len;
|
||||||
|
}
|
||||||
|
#endif /* TEXT || pCAL || iCCP || sPLT */
|
||||||
#endif /* READ || WRITE */
|
#endif /* READ || WRITE */
|
||||||
|
|
|
@ -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.1 [March 28, 2013]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-2013 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.)
|
||||||
*
|
*
|
||||||
|
@ -219,16 +219,18 @@ struct png_struct_def
|
||||||
png_uint_32 row_number; /* current row in interlace pass */
|
png_uint_32 row_number; /* current row in interlace pass */
|
||||||
png_uint_32 chunk_name; /* PNG_CHUNK() id of current chunk */
|
png_uint_32 chunk_name; /* PNG_CHUNK() id of current chunk */
|
||||||
png_bytep prev_row; /* buffer to save previous (unfiltered) row.
|
png_bytep prev_row; /* buffer to save previous (unfiltered) row.
|
||||||
* This is a pointer into big_prev_row
|
* While reading this is a pointer into
|
||||||
|
* big_prev_row; while writing it is separately
|
||||||
|
* allocated if needed.
|
||||||
*/
|
*/
|
||||||
png_bytep row_buf; /* buffer to save current (unfiltered) row.
|
png_bytep row_buf; /* buffer to save current (unfiltered) row.
|
||||||
* This is a pointer into big_row_buf
|
* While reading, this is a pointer into
|
||||||
|
* big_row_buf; while writing it is separately
|
||||||
|
* allocated.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_WRITE_SUPPORTED
|
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
||||||
png_bytep sub_row; /* buffer to save "sub" row when filtering */
|
png_bytep try_row; /* buffer to save trial row when filtering */
|
||||||
png_bytep up_row; /* buffer to save "up" row when filtering */
|
png_bytep tst_row; /* buffer to save best trial row when filtering */
|
||||||
png_bytep avg_row; /* buffer to save "avg" row when filtering */
|
|
||||||
png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */
|
|
||||||
#endif
|
#endif
|
||||||
png_size_t info_rowbytes; /* Added in 1.5.4: cache of updated row bytes */
|
png_size_t info_rowbytes; /* Added in 1.5.4: cache of updated row bytes */
|
||||||
|
|
||||||
|
@ -261,6 +263,9 @@ struct png_struct_def
|
||||||
/* pixel depth used for the row buffers */
|
/* pixel depth used for the row buffers */
|
||||||
png_byte transformed_pixel_depth;
|
png_byte transformed_pixel_depth;
|
||||||
/* pixel depth after read/write transforms */
|
/* pixel depth after read/write transforms */
|
||||||
|
#if PNG_ZLIB_VERNUM >= 0x1240
|
||||||
|
png_byte zstream_start; /* at start of an input zlib stream */
|
||||||
|
#endif /* Zlib >= 1.2.4 */
|
||||||
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
|
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||||
png_uint_16 filler; /* filler bytes for pixel expansion */
|
png_uint_16 filler; /* filler bytes for pixel expansion */
|
||||||
#endif
|
#endif
|
||||||
|
@ -346,17 +351,7 @@ struct png_struct_def
|
||||||
png_bytep quantize_index; /* index translation for palette files */
|
png_bytep quantize_index; /* index translation for palette files */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
/* Options */
|
||||||
png_byte heuristic_method; /* heuristic for row filter selection */
|
|
||||||
png_byte num_prev_filters; /* number of weights for previous rows */
|
|
||||||
png_bytep prev_filters; /* filter type(s) of previous row(s) */
|
|
||||||
png_uint_16p filter_weights; /* weight(s) for previous line(s) */
|
|
||||||
png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */
|
|
||||||
png_uint_16p filter_costs; /* relative filter calculation cost */
|
|
||||||
png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Options */
|
|
||||||
#ifdef PNG_SET_OPTION_SUPPORTED
|
#ifdef PNG_SET_OPTION_SUPPORTED
|
||||||
png_byte options; /* On/off state (up to 4 options) */
|
png_byte options; /* On/off state (up to 4 options) */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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.17 [March 26, 2015]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -30,7 +30,7 @@ png_set_bgr(png_structrp png_ptr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
/* Turn on 16 bit byte swapping */
|
/* Turn on 16-bit byte swapping */
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
png_set_swap(png_structrp png_ptr)
|
png_set_swap(png_structrp png_ptr)
|
||||||
{
|
{
|
||||||
|
@ -313,7 +313,7 @@ png_do_invert(png_row_infop row_info, png_bytep row)
|
||||||
|
|
||||||
#ifdef PNG_16BIT_SUPPORTED
|
#ifdef PNG_16BIT_SUPPORTED
|
||||||
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
/* Swaps byte order on 16 bit depth images */
|
/* Swaps byte order on 16-bit depth images */
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_do_swap(png_row_infop row_info, png_bytep row)
|
png_do_swap(png_row_infop row_info, png_bytep row)
|
||||||
{
|
{
|
||||||
|
@ -704,7 +704,7 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info)
|
||||||
*/
|
*/
|
||||||
for (; rp > png_ptr->row_buf; rp--)
|
for (; rp > png_ptr->row_buf; rp--)
|
||||||
{
|
{
|
||||||
if (*rp >> padding != 0)
|
if ((*rp >> padding) != 0)
|
||||||
png_ptr->num_palette_max = 1;
|
png_ptr->num_palette_max = 1;
|
||||||
padding = 0;
|
padding = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/* 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.15 [November 20, 2014]
|
||||||
* Copyright (c) 1998-2014 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2002,2004,2006-2014 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 @@
|
||||||
* writes to a file pointer. Note that this routine sometimes gets called
|
* writes to a file pointer. Note that this routine sometimes gets called
|
||||||
* with very small lengths, so you should implement some kind of simple
|
* with very small lengths, so you should implement some kind of simple
|
||||||
* buffering if you are using unbuffered writes. This should never be asked
|
* buffering if you are using unbuffered writes. This should never be asked
|
||||||
* to write more than 64K on a 16 bit machine.
|
* to write more than 64K on a 16-bit machine.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
|
|
|
@ -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.17 [March 26, 2015]
|
* Last changed in libpng 1.6.19 [November 12, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -97,7 +97,8 @@ png_write_info_before_PLTE(png_structrp png_ptr, png_const_inforp info_ptr)
|
||||||
if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0 && \
|
if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0 && \
|
||||||
png_ptr->mng_features_permitted != 0)
|
png_ptr->mng_features_permitted != 0)
|
||||||
{
|
{
|
||||||
png_warning(png_ptr, "MNG features are not allowed in a PNG datastream");
|
png_warning(png_ptr,
|
||||||
|
"MNG features are not allowed in a PNG datastream");
|
||||||
png_ptr->mng_features_permitted = 0;
|
png_ptr->mng_features_permitted = 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -117,15 +118,15 @@ png_write_info_before_PLTE(png_structrp png_ptr, png_const_inforp info_ptr)
|
||||||
* flag set, and if it does, writes the chunk.
|
* flag set, and if it does, writes the chunk.
|
||||||
*
|
*
|
||||||
* 1.6.0: COLORSPACE support controls the writing of these chunks too, and
|
* 1.6.0: COLORSPACE support controls the writing of these chunks too, and
|
||||||
* the chunks will be written if the WRITE routine is there and information
|
* the chunks will be written if the WRITE routine is there and
|
||||||
* is available in the COLORSPACE. (See png_colorspace_sync_info in png.c
|
* information * is available in the COLORSPACE. (See
|
||||||
* for where the valid flags get set.)
|
* png_colorspace_sync_info in png.c for where the valid flags get set.)
|
||||||
*
|
*
|
||||||
* Under certain circumstances the colorspace can be invalidated without
|
* Under certain circumstances the colorspace can be invalidated without
|
||||||
* syncing the info_struct 'valid' flags; this happens if libpng detects and
|
* syncing the info_struct 'valid' flags; this happens if libpng detects
|
||||||
* error and calls png_error while the color space is being set, yet the
|
* an error and calls png_error while the color space is being set, yet
|
||||||
* application continues writing the PNG. So check the 'invalid' flag here
|
* the application continues writing the PNG. So check the 'invalid'
|
||||||
* too.
|
* flag here too.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_GAMMA_SUPPORTED
|
#ifdef PNG_GAMMA_SUPPORTED
|
||||||
# ifdef PNG_WRITE_gAMA_SUPPORTED
|
# ifdef PNG_WRITE_gAMA_SUPPORTED
|
||||||
|
@ -205,7 +206,7 @@ png_write_info(png_structrp png_ptr, png_const_inforp info_ptr)
|
||||||
png_write_PLTE(png_ptr, info_ptr->palette,
|
png_write_PLTE(png_ptr, info_ptr->palette,
|
||||||
(png_uint_32)info_ptr->num_palette);
|
(png_uint_32)info_ptr->num_palette);
|
||||||
|
|
||||||
else if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) !=0)
|
else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
png_error(png_ptr, "Valid palette required for paletted images");
|
png_error(png_ptr, "Valid palette required for paletted images");
|
||||||
|
|
||||||
#ifdef PNG_WRITE_tRNS_SUPPORTED
|
#ifdef PNG_WRITE_tRNS_SUPPORTED
|
||||||
|
@ -216,8 +217,13 @@ png_write_info(png_structrp png_ptr, png_const_inforp info_ptr)
|
||||||
if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0 &&
|
if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0 &&
|
||||||
info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
{
|
{
|
||||||
int j;
|
int j, jend;
|
||||||
for (j = 0; j<(int)info_ptr->num_trans; j++)
|
|
||||||
|
jend = info_ptr->num_trans;
|
||||||
|
if (jend > PNG_MAX_PALETTE_LENGTH)
|
||||||
|
jend = PNG_MAX_PALETTE_LENGTH;
|
||||||
|
|
||||||
|
for (j = 0; j<jend; ++j)
|
||||||
info_ptr->trans_alpha[j] =
|
info_ptr->trans_alpha[j] =
|
||||||
(png_byte)(255 - info_ptr->trans_alpha[j]);
|
(png_byte)(255 - info_ptr->trans_alpha[j]);
|
||||||
}
|
}
|
||||||
|
@ -538,7 +544,7 @@ png_create_write_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
|
||||||
/* App warnings are warnings in release (or release candidate) builds but
|
/* App warnings are warnings in release (or release candidate) builds but
|
||||||
* are errors during development.
|
* are errors during development.
|
||||||
*/
|
*/
|
||||||
#if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
|
#if PNG_RELEASE_BUILD
|
||||||
png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
|
png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -917,10 +923,6 @@ png_write_flush(png_structrp png_ptr)
|
||||||
}
|
}
|
||||||
#endif /* WRITE_FLUSH */
|
#endif /* WRITE_FLUSH */
|
||||||
|
|
||||||
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
|
||||||
static void png_reset_filter_heuristics(png_structrp png_ptr);/* forward decl */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Free any memory used in png_ptr struct without freeing the struct itself. */
|
/* Free any memory used in png_ptr struct without freeing the struct itself. */
|
||||||
static void
|
static void
|
||||||
png_write_destroy(png_structrp png_ptr)
|
png_write_destroy(png_structrp png_ptr)
|
||||||
|
@ -937,24 +939,11 @@ png_write_destroy(png_structrp png_ptr)
|
||||||
png_ptr->row_buf = NULL;
|
png_ptr->row_buf = NULL;
|
||||||
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
||||||
png_free(png_ptr, png_ptr->prev_row);
|
png_free(png_ptr, png_ptr->prev_row);
|
||||||
png_free(png_ptr, png_ptr->sub_row);
|
png_free(png_ptr, png_ptr->try_row);
|
||||||
png_free(png_ptr, png_ptr->up_row);
|
png_free(png_ptr, png_ptr->tst_row);
|
||||||
png_free(png_ptr, png_ptr->avg_row);
|
|
||||||
png_free(png_ptr, png_ptr->paeth_row);
|
|
||||||
png_ptr->prev_row = NULL;
|
png_ptr->prev_row = NULL;
|
||||||
png_ptr->sub_row = NULL;
|
png_ptr->try_row = NULL;
|
||||||
png_ptr->up_row = NULL;
|
png_ptr->tst_row = NULL;
|
||||||
png_ptr->avg_row = NULL;
|
|
||||||
png_ptr->paeth_row = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
|
||||||
/* Use this to save a little code space, it doesn't free the filter_costs */
|
|
||||||
png_reset_filter_heuristics(png_ptr);
|
|
||||||
png_free(png_ptr, png_ptr->filter_costs);
|
|
||||||
png_free(png_ptr, png_ptr->inv_filter_costs);
|
|
||||||
png_ptr->filter_costs = NULL;
|
|
||||||
png_ptr->inv_filter_costs = NULL;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
@ -1044,6 +1033,7 @@ png_set_filter(png_structrp png_ptr, int method, int filters)
|
||||||
#endif /* WRITE_FILTER */
|
#endif /* WRITE_FILTER */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
||||||
/* If we have allocated the row_buf, this means we have already started
|
/* If we have allocated the row_buf, this means we have already started
|
||||||
* with the image and we should have allocated all of the filter buffers
|
* with the image and we should have allocated all of the filter buffers
|
||||||
* that have been selected. If prev_row isn't already allocated, then
|
* that have been selected. If prev_row isn't already allocated, then
|
||||||
|
@ -1052,203 +1042,76 @@ png_set_filter(png_structrp png_ptr, int method, int filters)
|
||||||
* wants to start and stop using particular filters during compression,
|
* wants to start and stop using particular filters during compression,
|
||||||
* it should start out with all of the filters, and then remove them
|
* it should start out with all of the filters, and then remove them
|
||||||
* or add them back after the start of compression.
|
* or add them back after the start of compression.
|
||||||
|
*
|
||||||
|
* NOTE: this is a nasty constraint on the code, because it means that the
|
||||||
|
* prev_row buffer must be maintained even if there are currently no
|
||||||
|
* 'prev_row' requiring filters active.
|
||||||
*/
|
*/
|
||||||
if (png_ptr->row_buf != NULL)
|
if (png_ptr->row_buf != NULL)
|
||||||
{
|
{
|
||||||
#ifdef PNG_WRITE_FILTER_SUPPORTED
|
int num_filters;
|
||||||
if ((png_ptr->do_filter & PNG_FILTER_SUB) != 0 &&
|
png_alloc_size_t buf_size;
|
||||||
png_ptr->sub_row == NULL)
|
|
||||||
|
/* Repeat the checks in png_write_start_row; 1 pixel high or wide
|
||||||
|
* images cannot benefit from certain filters. If this isn't done here
|
||||||
|
* the check below will fire on 1 pixel high images.
|
||||||
|
*/
|
||||||
|
if (png_ptr->height == 1)
|
||||||
|
filters &= ~(PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH);
|
||||||
|
|
||||||
|
if (png_ptr->width == 1)
|
||||||
|
filters &= ~(PNG_FILTER_SUB|PNG_FILTER_AVG|PNG_FILTER_PAETH);
|
||||||
|
|
||||||
|
if ((filters & (PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH)) != 0
|
||||||
|
&& png_ptr->prev_row == NULL)
|
||||||
{
|
{
|
||||||
png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
|
/* This is the error case, however it is benign - the previous row
|
||||||
(png_ptr->rowbytes + 1));
|
* is not available so the filter can't be used. Just warn here.
|
||||||
png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
|
*/
|
||||||
|
png_app_warning(png_ptr,
|
||||||
|
"png_set_filter: UP/AVG/PAETH cannot be added after start");
|
||||||
|
filters &= ~(PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((png_ptr->do_filter & PNG_FILTER_UP) != 0 &&
|
num_filters = 0;
|
||||||
png_ptr->up_row == NULL)
|
|
||||||
{
|
|
||||||
if (png_ptr->prev_row == NULL)
|
|
||||||
{
|
|
||||||
png_warning(png_ptr, "Can't add Up filter after starting");
|
|
||||||
png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
|
|
||||||
~PNG_FILTER_UP);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
if (filters & PNG_FILTER_SUB)
|
||||||
{
|
num_filters++;
|
||||||
png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
|
|
||||||
(png_ptr->rowbytes + 1));
|
|
||||||
png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((png_ptr->do_filter & PNG_FILTER_AVG) != 0 &&
|
if (filters & PNG_FILTER_UP)
|
||||||
png_ptr->avg_row == NULL)
|
num_filters++;
|
||||||
{
|
|
||||||
if (png_ptr->prev_row == NULL)
|
|
||||||
{
|
|
||||||
png_warning(png_ptr, "Can't add Average filter after starting");
|
|
||||||
png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
|
|
||||||
~PNG_FILTER_AVG);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
if (filters & PNG_FILTER_AVG)
|
||||||
{
|
num_filters++;
|
||||||
png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
|
|
||||||
(png_ptr->rowbytes + 1));
|
|
||||||
png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((png_ptr->do_filter & PNG_FILTER_PAETH) != 0 &&
|
if (filters & PNG_FILTER_PAETH)
|
||||||
png_ptr->paeth_row == NULL)
|
num_filters++;
|
||||||
{
|
|
||||||
if (png_ptr->prev_row == NULL)
|
|
||||||
{
|
|
||||||
png_warning(png_ptr, "Can't add Paeth filter after starting");
|
|
||||||
png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
/* Allocate needed row buffers if they have not already been
|
||||||
{
|
* allocated.
|
||||||
png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
|
*/
|
||||||
(png_ptr->rowbytes + 1));
|
buf_size = PNG_ROWBYTES(png_ptr->usr_channels * png_ptr->usr_bit_depth,
|
||||||
png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
|
png_ptr->width) + 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (png_ptr->do_filter == PNG_NO_FILTERS)
|
if (png_ptr->try_row == NULL)
|
||||||
#endif /* WRITE_FILTER */
|
png_ptr->try_row = png_voidcast(png_bytep,
|
||||||
png_ptr->do_filter = PNG_FILTER_NONE;
|
png_malloc(png_ptr, buf_size));
|
||||||
|
|
||||||
|
if (num_filters > 1)
|
||||||
|
{
|
||||||
|
if (png_ptr->tst_row == NULL)
|
||||||
|
png_ptr->tst_row = png_voidcast(png_bytep,
|
||||||
|
png_malloc(png_ptr, buf_size));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
png_ptr->do_filter = (png_byte)filters;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
else
|
else
|
||||||
png_error(png_ptr, "Unknown custom filter method");
|
png_error(png_ptr, "Unknown custom filter method");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This allows us to influence the way in which libpng chooses the "best"
|
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */
|
||||||
* filter for the current scanline. While the "minimum-sum-of-absolute-
|
|
||||||
* differences metric is relatively fast and effective, there is some
|
|
||||||
* question as to whether it can be improved upon by trying to keep the
|
|
||||||
* filtered data going to zlib more consistent, hopefully resulting in
|
|
||||||
* better compression.
|
|
||||||
*/
|
|
||||||
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* GRR 970116 */
|
|
||||||
/* Convenience reset API. */
|
|
||||||
static void
|
|
||||||
png_reset_filter_heuristics(png_structrp png_ptr)
|
|
||||||
{
|
|
||||||
/* Clear out any old values in the 'weights' - this must be done because if
|
|
||||||
* the app calls set_filter_heuristics multiple times with different
|
|
||||||
* 'num_weights' values we would otherwise potentially have wrong sized
|
|
||||||
* arrays.
|
|
||||||
*/
|
|
||||||
png_ptr->num_prev_filters = 0;
|
|
||||||
png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
|
|
||||||
if (png_ptr->prev_filters != NULL)
|
|
||||||
{
|
|
||||||
png_bytep old = png_ptr->prev_filters;
|
|
||||||
png_ptr->prev_filters = NULL;
|
|
||||||
png_free(png_ptr, old);
|
|
||||||
}
|
|
||||||
if (png_ptr->filter_weights != NULL)
|
|
||||||
{
|
|
||||||
png_uint_16p old = png_ptr->filter_weights;
|
|
||||||
png_ptr->filter_weights = NULL;
|
|
||||||
png_free(png_ptr, old);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (png_ptr->inv_filter_weights != NULL)
|
|
||||||
{
|
|
||||||
png_uint_16p old = png_ptr->inv_filter_weights;
|
|
||||||
png_ptr->inv_filter_weights = NULL;
|
|
||||||
png_free(png_ptr, old);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Leave the filter_costs - this array is fixed size. */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
png_init_filter_heuristics(png_structrp png_ptr, int heuristic_method,
|
|
||||||
int num_weights)
|
|
||||||
{
|
|
||||||
if (png_ptr == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Clear out the arrays */
|
|
||||||
png_reset_filter_heuristics(png_ptr);
|
|
||||||
|
|
||||||
/* Check arguments; the 'reset' function makes the correct settings for the
|
|
||||||
* unweighted case, but we must handle the weight case by initializing the
|
|
||||||
* arrays for the caller.
|
|
||||||
*/
|
|
||||||
if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (num_weights > 0)
|
|
||||||
{
|
|
||||||
png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
|
|
||||||
(png_uint_32)((sizeof (png_byte)) * num_weights));
|
|
||||||
|
|
||||||
/* To make sure that the weighting starts out fairly */
|
|
||||||
for (i = 0; i < num_weights; i++)
|
|
||||||
{
|
|
||||||
png_ptr->prev_filters[i] = 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
|
|
||||||
(png_uint_32)((sizeof (png_uint_16)) * num_weights));
|
|
||||||
|
|
||||||
png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
|
|
||||||
(png_uint_32)((sizeof (png_uint_16)) * num_weights));
|
|
||||||
|
|
||||||
for (i = 0; i < num_weights; i++)
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_weights[i] =
|
|
||||||
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Safe to set this now */
|
|
||||||
png_ptr->num_prev_filters = (png_byte)num_weights;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If, in the future, there are other filter methods, this would
|
|
||||||
* need to be based on png_ptr->filter.
|
|
||||||
*/
|
|
||||||
if (png_ptr->filter_costs == NULL)
|
|
||||||
{
|
|
||||||
png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
|
|
||||||
(png_uint_32)((sizeof (png_uint_16)) * PNG_FILTER_VALUE_LAST));
|
|
||||||
|
|
||||||
png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
|
|
||||||
(png_uint_32)((sizeof (png_uint_16)) * PNG_FILTER_VALUE_LAST));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_costs[i] =
|
|
||||||
png_ptr->filter_costs[i] = PNG_COST_FACTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* All the arrays are inited, safe to set this: */
|
|
||||||
png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_WEIGHTED;
|
|
||||||
|
|
||||||
/* Return the 'ok' code. */
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT ||
|
|
||||||
heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
png_warning(png_ptr, "Unknown filter heuristic method");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Provide floating and fixed point APIs */
|
/* Provide floating and fixed point APIs */
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||||
void PNGAPI
|
void PNGAPI
|
||||||
|
@ -1256,52 +1119,11 @@ png_set_filter_heuristics(png_structrp png_ptr, int heuristic_method,
|
||||||
int num_weights, png_const_doublep filter_weights,
|
int num_weights, png_const_doublep filter_weights,
|
||||||
png_const_doublep filter_costs)
|
png_const_doublep filter_costs)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_set_filter_heuristics");
|
PNG_UNUSED(png_ptr)
|
||||||
|
PNG_UNUSED(heuristic_method)
|
||||||
/* The internal API allocates all the arrays and ensures that the elements of
|
PNG_UNUSED(num_weights)
|
||||||
* those arrays are set to the default value.
|
PNG_UNUSED(filter_weights)
|
||||||
*/
|
PNG_UNUSED(filter_costs)
|
||||||
if (png_init_filter_heuristics(png_ptr, heuristic_method, num_weights) == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* If using the weighted method copy in the weights. */
|
|
||||||
if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < num_weights; i++)
|
|
||||||
{
|
|
||||||
if (filter_weights[i] <= 0.0)
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_weights[i] =
|
|
||||||
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_weights[i] =
|
|
||||||
(png_uint_16)(PNG_WEIGHT_FACTOR*filter_weights[i]+.5);
|
|
||||||
|
|
||||||
png_ptr->filter_weights[i] =
|
|
||||||
(png_uint_16)(PNG_WEIGHT_FACTOR/filter_weights[i]+.5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Here is where we set the relative costs of the different filters. We
|
|
||||||
* should take the desired compression level into account when setting
|
|
||||||
* the costs, so that Paeth, for instance, has a high relative cost at low
|
|
||||||
* compression levels, while it has a lower relative cost at higher
|
|
||||||
* compression settings. The filter types are in order of increasing
|
|
||||||
* relative cost, so it would be possible to do this with an algorithm.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) if (filter_costs[i] >= 1.0)
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_costs[i] =
|
|
||||||
(png_uint_16)(PNG_COST_FACTOR / filter_costs[i] + .5);
|
|
||||||
|
|
||||||
png_ptr->filter_costs[i] =
|
|
||||||
(png_uint_16)(PNG_COST_FACTOR * filter_costs[i] + .5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* FLOATING_POINT */
|
#endif /* FLOATING_POINT */
|
||||||
|
|
||||||
|
@ -1311,63 +1133,11 @@ png_set_filter_heuristics_fixed(png_structrp png_ptr, int heuristic_method,
|
||||||
int num_weights, png_const_fixed_point_p filter_weights,
|
int num_weights, png_const_fixed_point_p filter_weights,
|
||||||
png_const_fixed_point_p filter_costs)
|
png_const_fixed_point_p filter_costs)
|
||||||
{
|
{
|
||||||
png_debug(1, "in png_set_filter_heuristics_fixed");
|
PNG_UNUSED(png_ptr)
|
||||||
|
PNG_UNUSED(heuristic_method)
|
||||||
/* The internal API allocates all the arrays and ensures that the elements of
|
PNG_UNUSED(num_weights)
|
||||||
* those arrays are set to the default value.
|
PNG_UNUSED(filter_weights)
|
||||||
*/
|
PNG_UNUSED(filter_costs)
|
||||||
if (png_init_filter_heuristics(png_ptr, heuristic_method, num_weights) == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* If using the weighted method copy in the weights. */
|
|
||||||
if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < num_weights; i++)
|
|
||||||
{
|
|
||||||
if (filter_weights[i] <= 0)
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_weights[i] =
|
|
||||||
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
png_ptr->inv_filter_weights[i] = (png_uint_16)
|
|
||||||
((PNG_WEIGHT_FACTOR*filter_weights[i]+PNG_FP_HALF)/PNG_FP_1);
|
|
||||||
|
|
||||||
png_ptr->filter_weights[i] = (png_uint_16)((PNG_WEIGHT_FACTOR*
|
|
||||||
PNG_FP_1+(filter_weights[i]/2))/filter_weights[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Here is where we set the relative costs of the different filters. We
|
|
||||||
* should take the desired compression level into account when setting
|
|
||||||
* the costs, so that Paeth, for instance, has a high relative cost at low
|
|
||||||
* compression levels, while it has a lower relative cost at higher
|
|
||||||
* compression settings. The filter types are in order of increasing
|
|
||||||
* relative cost, so it would be possible to do this with an algorithm.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
|
||||||
if (filter_costs[i] >= PNG_FP_1)
|
|
||||||
{
|
|
||||||
png_uint_32 tmp;
|
|
||||||
|
|
||||||
/* Use a 32 bit unsigned temporary here because otherwise the
|
|
||||||
* intermediate value will be a 32 bit *signed* integer (ANSI rules)
|
|
||||||
* and this will get the wrong answer on division.
|
|
||||||
*/
|
|
||||||
tmp = PNG_COST_FACTOR*PNG_FP_1 + (filter_costs[i]/2);
|
|
||||||
tmp /= filter_costs[i];
|
|
||||||
|
|
||||||
png_ptr->inv_filter_costs[i] = (png_uint_16)tmp;
|
|
||||||
|
|
||||||
tmp = PNG_COST_FACTOR * filter_costs[i] + PNG_FP_HALF;
|
|
||||||
tmp /= PNG_FP_1;
|
|
||||||
|
|
||||||
png_ptr->filter_costs[i] = (png_uint_16)tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* FIXED_POINT */
|
#endif /* FIXED_POINT */
|
||||||
#endif /* WRITE_WEIGHTED_FILTER */
|
#endif /* WRITE_WEIGHTED_FILTER */
|
||||||
|
@ -1652,7 +1422,7 @@ png_write_png(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ENDIAN not supported");
|
png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ENDIAN not supported");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Swap bits of 1, 2, 4 bit packed pixel formats */
|
/* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats */
|
||||||
if ((transforms & PNG_TRANSFORM_PACKSWAP) != 0)
|
if ((transforms & PNG_TRANSFORM_PACKSWAP) != 0)
|
||||||
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
|
||||||
png_set_packswap(png_ptr);
|
png_set_packswap(png_ptr);
|
||||||
|
@ -1682,7 +1452,7 @@ png_write_png(png_structrp png_ptr, png_inforp info_ptr,
|
||||||
|
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
#ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
|
# ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
|
||||||
/* Initialize the write structure - general purpose utility. */
|
/* Initialize the write structure - general purpose utility. */
|
||||||
static int
|
static int
|
||||||
png_image_write_init(png_imagep image)
|
png_image_write_init(png_imagep image)
|
||||||
|
@ -1765,10 +1535,11 @@ png_write_image_16bit(png_voidp argument)
|
||||||
++input_row; /* To point to the first component */
|
++input_row; /* To point to the first component */
|
||||||
++output_row;
|
++output_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
# endif
|
|
||||||
aindex = channels;
|
aindex = channels;
|
||||||
|
# else
|
||||||
|
aindex = channels;
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
@ -1850,7 +1621,7 @@ png_write_image_16bit(png_voidp argument)
|
||||||
* calculation can be done to 15 bits of accuracy; however, the output needs to
|
* calculation can be done to 15 bits of accuracy; however, the output needs to
|
||||||
* be scaled in the range 0..255*65535, so include that scaling here.
|
* be scaled in the range 0..255*65535, so include that scaling here.
|
||||||
*/
|
*/
|
||||||
#define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+(alpha>>1))/alpha)
|
# define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+(alpha>>1))/alpha)
|
||||||
|
|
||||||
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,
|
||||||
|
@ -2227,7 +1998,7 @@ png_image_write_main(png_voidp argument)
|
||||||
/* Now set up the data transformations (*after* the header is written),
|
/* Now set up the data transformations (*after* the header is written),
|
||||||
* remove the handled transformations from the 'format' flags for checking.
|
* remove the handled transformations from the 'format' flags for checking.
|
||||||
*
|
*
|
||||||
* First check for a little endian system if writing 16 bit files.
|
* First check for a little endian system if writing 16-bit files.
|
||||||
*/
|
*/
|
||||||
if (write_16bit != 0)
|
if (write_16bit != 0)
|
||||||
{
|
{
|
||||||
|
@ -2289,9 +2060,9 @@ png_image_write_main(png_voidp argument)
|
||||||
* it about 50 times. The speed-up in pngstest was about 10-20% of the
|
* it about 50 times. The speed-up in pngstest was about 10-20% of the
|
||||||
* total (user) time on a heavily loaded system.
|
* total (user) time on a heavily loaded system.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
|
# ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
|
||||||
png_set_compression_level(png_ptr, 3);
|
png_set_compression_level(png_ptr, 3);
|
||||||
#endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for the cases that currently require a pre-transform on the row
|
/* Check for the cases that currently require a pre-transform on the row
|
||||||
|
@ -2454,6 +2225,6 @@ png_image_write_to_file(png_imagep image, const char *file_name,
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* STDIO */
|
# endif /* STDIO */
|
||||||
#endif /* SIMPLIFIED_WRITE */
|
#endif /* SIMPLIFIED_WRITE */
|
||||||
#endif /* WRITE */
|
#endif /* WRITE */
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.17 [March 26, 2015]
|
* Last changed in libpng 1.6.18 [July 23, 2015]
|
||||||
* Copyright (c) 1998-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.)
|
||||||
*
|
*
|
||||||
|
@ -71,7 +71,8 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
int shift, v;
|
unsigned int shift;
|
||||||
|
int v;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
|
|
||||||
|
@ -110,7 +111,8 @@ png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
png_bytep sp, dp;
|
png_bytep sp, dp;
|
||||||
int shift, v;
|
unsigned int shift;
|
||||||
|
int v;
|
||||||
png_uint_32 i;
|
png_uint_32 i;
|
||||||
png_uint_32 row_width = row_info->width;
|
png_uint_32 row_width = row_info->width;
|
||||||
|
|
||||||
|
@ -422,7 +424,7 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
||||||
*(dp++) = *(sp++);
|
*(dp++) = *(sp++);
|
||||||
*/
|
*/
|
||||||
sp+=3; dp = sp;
|
sp+=3; dp = sp;
|
||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*dp = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -446,7 +448,7 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
||||||
*/
|
*/
|
||||||
sp+=6; dp = sp;
|
sp+=6; dp = sp;
|
||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*(dp++) = (png_byte)(255 - *(sp++));
|
||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*dp = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* WRITE_16BIT */
|
#endif /* WRITE_16BIT */
|
||||||
|
@ -484,7 +486,7 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
||||||
*/
|
*/
|
||||||
sp+=2; dp = sp;
|
sp+=2; dp = sp;
|
||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*(dp++) = (png_byte)(255 - *(sp++));
|
||||||
*(dp++) = (png_byte)(255 - *(sp++));
|
*dp = (png_byte)(255 - *(sp++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* WRITE_16BIT */
|
#endif /* WRITE_16BIT */
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue