summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Randers-Pehrson <glennrp at users.sourceforge.net>2015-09-23 22:08:04 -0500
committerGlenn Randers-Pehrson <glennrp at users.sourceforge.net>2015-09-23 22:08:04 -0500
commitefe4e5d10d3afc5983cdd7733f8d38f855ed3f9b (patch)
treee89520a7f47a1bb2ad9764a758d37fd2a131253d
parentd6eb4b71aceb7d6059b58180332d7b71ed71d0c2 (diff)
downloadlibpng-efe4e5d10d3afc5983cdd7733f8d38f855ed3f9b.tar.gz
[libpng16] Reverted the fix of byte order in png_do_read_filler() with 16-bit
input that was made in version 1.6.17beta01, to preserve legacy behavior even though it was incorrect. Instead, added new API png_set_filter_16() and png_set_add_alpha_16() that set a flag to make png_do_read_filter() interpret the filler bytes properly.
-rw-r--r--ANNOUNCE9
-rw-r--r--CHANGES7
-rw-r--r--contrib/libtests/pngvalid.c8
-rw-r--r--example.c4
-rw-r--r--libpng-manual.txt52
-rw-r--r--libpng.364
-rw-r--r--png.h18
-rw-r--r--pngpriv.h1
-rw-r--r--pngread.c2
-rw-r--r--pngrtran.c9
-rw-r--r--pngtrans.c26
-rw-r--r--pngwrite.c4
-rw-r--r--scripts/symbols.def2
13 files changed, 141 insertions, 65 deletions
diff --git a/ANNOUNCE b/ANNOUNCE
index 5658bbc98..191a07c4d 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,4 +1,4 @@
-Libpng 1.6.19beta03 - September 20, 2015
+Libpng 1.6.19beta03 - September 24, 2015
This is not intended to be a public release. It will be replaced
within a few weeks by a public version or by another test version.
@@ -64,7 +64,7 @@ Version 1.6.19beta02 [August 19, 2015]
in ANSI-C (unlike 0x80000000 in the signed case) the checking that
occurs later can catch them (John Bowler).
-Version 1.6.19beta03 [September 20, 2015]
+Version 1.6.19beta03 [September 24, 2015]
Fixed png_save_int_32 when int is not 2's complement (John Bowler).
Updated libpng16 with all the recent test changes from libpng17,
including changes to pngvalid.c to ensure that the original,
@@ -83,6 +83,11 @@ Version 1.6.19beta03 [September 20, 2015]
slightly different error limits this simplifies maintenance. The
makepngs.sh script has also been updated to more accurately reflect
current problems in libpng 1.7 (John Bowler).
+ Reverted the fix of byte order in png_do_read_filler() with 16-bit
+ input that was made in version 1.6.17beta01, to preserve legacy
+ behavior even though it was incorrect. Instead, added new API
+ png_set_filter_16() and png_set_add_alpha_16() that set a flag to
+ make png_do_read_filter() interpret the filler bytes properly.
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit
diff --git a/CHANGES b/CHANGES
index 735123cd7..36c3bcddc 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5347,7 +5347,7 @@ Version 1.6.19beta02 [August 19, 2015]
in ANSI-C (unlike 0x80000000 in the signed case) the checking that
occurs later can catch them (John Bowler).
-Version 1.6.19beta03 [September 20, 2015]
+Version 1.6.19beta03 [September 24, 2015]
Fixed png_save_int_32 when int is not 2's complement (John Bowler).
Updated libpng16 with all the recent test changes from libpng17,
including changes to pngvalid.c to ensure that the original,
@@ -5366,6 +5366,11 @@ Version 1.6.19beta03 [September 20, 2015]
slightly different error limits this simplifies maintenance. The
makepngs.sh script has also been updated to more accurately reflect
current problems in libpng 1.7 (John Bowler).
+ Reverted the fix of byte order in png_do_read_filler() with 16-bit
+ input that was made in version 1.6.17beta01, to preserve legacy
+ behavior even though it was incorrect. Instead, added new API
+ png_set_filter_16() and png_set_add_alpha_16() that set a flag to
+ make png_do_read_filter() interpret the filler bytes properly.
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit
diff --git a/contrib/libtests/pngvalid.c b/contrib/libtests/pngvalid.c
index 5fa363a66..37f508363 100644
--- a/contrib/libtests/pngvalid.c
+++ b/contrib/libtests/pngvalid.c
@@ -1,7 +1,7 @@
/* pngvalid.c - validate libpng by constructing then reading png files.
*
- * Last changed in libpng 1.6.18 [(PENDING RELEASE)]
+ * Last changed in libpng 1.5.24 [(PENDING RELEASE)]
* Copyright (c) 2014-2015 Glenn Randers-Pehrson
* Written by John Cunningham Bowler
*
@@ -3578,7 +3578,7 @@ check_interlace_type(int const interlace_type)
#define CAN_WRITE_INTERLACE\
PNG_LIBPNG_VER >= 10700 || defined PNG_WRITE_INTERLACING_SUPPORTED
-/* Make a standardized image given a an image colour type, bit depth and
+/* Make a standardized image given an image colour type, bit depth and
* interlace type. The standard images have a very restricted range of
* rows and heights and are used for testing transforms rather than image
* layout details. See make_size_images below for a way to make images
@@ -8039,7 +8039,7 @@ image_transform_png_set_filler_set(const image_transform *this,
RANDOMIZE(data.filler);
data.flags = random_choice();
- png_set_filler(pp, data.filler, data.flags);
+ png_set_filler_16(pp, data.filler, data.flags);
/* The standard display handling stuff also needs to know that
* there is a filler, so set that here.
@@ -8112,7 +8112,7 @@ image_transform_png_set_add_alpha_set(const image_transform *this,
RANDOMIZE(data.filler);
data.flags = random_choice();
- png_set_add_alpha(pp, data.filler, data.flags);
+ png_set_add_alpha_16(pp, data.filler, data.flags);
this->next->set(this->next, that, pp, pi);
}
diff --git a/example.c b/example.c
index 0a241413b..902b6c584 100644
--- a/example.c
+++ b/example.c
@@ -522,7 +522,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
png_set_swap(png_ptr);
/* Add filler (or alpha) byte (before/after each RGB triplet) */
- png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
+ png_set_filler_16(png_ptr, 0xffff, PNG_FILLER_AFTER);
#ifdef PNG_READ_INTERLACING_SUPPORTED
/* Turn on interlace handling. REQUIRED if you are not using
@@ -958,7 +958,7 @@ void write_png(char *file_name /* , ... other image information ... */)
/* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into
* RGB (4 channels -> 3 channels). The second parameter is not used.
*/
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
+ png_set_filler_16(png_ptr, 0, PNG_FILLER_BEFORE);
/* Flip BGR pixels to RGB */
png_set_bgr(png_ptr);
diff --git a/libpng-manual.txt b/libpng-manual.txt
index 90b5610c1..7ff1b675b 100644
--- a/libpng-manual.txt
+++ b/libpng-manual.txt
@@ -1,6 +1,6 @@
libpng-manual.txt - A description on how to use and modify libpng
- libpng version 1.6.19beta03 - August 19, 2015
+ libpng version 1.6.19beta03 - September 24, 2015
Updated and distributed by Glenn Randers-Pehrson
<glennrp at users.sourceforge.net>
Copyright (c) 1998-2015 Glenn Randers-Pehrson
@@ -11,7 +11,7 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
- libpng versions 0.97, January 1998, through 1.6.19beta03 - August 19, 2015
+ libpng versions 0.97, January 1998, through 1.6.19beta03 - September 24, 2015
Updated and distributed by Glenn Randers-Pehrson
Copyright (c) 1998-2015 Glenn Randers-Pehrson
@@ -1685,17 +1685,21 @@ described below.
Data will be decoded into the supplied row buffers packed into bytes
unless the library has been told to transform it into another format.
For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called. 8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
+2 pixels/byte with the leftmost pixel in the high-order bits of the byte,
+unless png_set_packing() is called. 8-bit RGB data will be stored
+in RGB RGB RGB format unless png_set_filler_16() or png_set_add_alpha_16()
is called to insert filler bytes, either before or after each RGB triplet.
+
16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
byte of the color value first, unless png_set_scale_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
-be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
-or png_set_scale_16().
+transform it to regular RGB RGB triplets, or png_set_filler_16() or
+png_set_add alpha_16() is called to insert trwo filler bytes, either before
+or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data
+can be modified with png_set_filler_16(), png_set_add_alpha_16(),
+png_set_strip_16(), or png_set_scale_16(). Note that png_set_filler_16()
+and png_set_add_alpha_16(), which can be used with either 8-bit or 16-bit
+images have replaced the png_set_filler() and png_set_add_alpha() functions,
+which only work properly with 8-bit data.
The following code transforms grayscale images of less than 8 to 8 bits,
changes paletted images to RGB, and adds a full alpha channel if there is
@@ -1785,7 +1789,7 @@ Within the matrix,
"-" means the transformation is not supported.
"." means nothing is necessary (a tRNS chunk can just be ignored).
"t" means the transformation is obtained by png_set_tRNS.
- "A" means the transformation is obtained by png_set_add_alpha().
+ "A" means the transformation is obtained by png_set_add_alpha_16().
"X" means the transformation is obtained by png_set_expand().
"1" means the transformation is obtained by
png_set_expand_gray_1_2_4_to_8() (and by png_set_expand()
@@ -1848,24 +1852,26 @@ PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
into 4 or 8 bytes for windowing systems that need them in this format:
if (color_type == PNG_COLOR_TYPE_RGB)
- png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
+ png_set_filler_16(png_ptr, filler, PNG_FILLER_BEFORE);
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
+where "filler" is the 8-bit or 16-bit number to fill with, and the location
+is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
you want the filler before the RGB or after. This transformation
does not affect images that already have full alpha channels. To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
+opaque alpha channel, use filler=0xffff and PNG_FILLER_AFTER which
will generate RGBA pixels.
-Note that png_set_filler() does not change the color type. If you want
+Note that png_set_filler_16() does not change the color type. If you want
to do that, you can add a true alpha channel with
if (color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_GRAY)
- png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
+ png_set_add_alpha_16(png_ptr, filler, PNG_FILLER_AFTER);
where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
+The png_set_alpha() function was added in libpng-1.2.7 and the
+png_set_alpha_16() function, which can be used for either 8-bit or
+16-bit images, was added in libpng-1.5.24.
If you are reading an image with an alpha channel, and you need the
data as ARGB instead of the normal PNG format RGBA:
@@ -4904,7 +4910,13 @@ limits are now
png_user_chunk_malloc_max 0 (unlimited) 8,000,000
The png_set_option() function (and the "options" member of the png struct) was
-added to libpng-1.5.15.
+added to libpng-1.5.15, with option PNG_ARM_NEON.
+
+The png_set_filler_16() and png_set_add_alpha_16() functions were added
+at libpng-1.5.24 and libpng-1.6.19. These replace the png_set_filler(() and
+the png_set_add_alpha() functions, which did not work properly with 16-bit
+images. The new functions can be used with either 8-bit or 16-bit images,
+while the old functions are still available for use only with 8-bit images.
The library now supports a complete fixed point implementation and can
thus be used on systems that have no floating point support or very
@@ -5312,7 +5324,7 @@ Other rules can be inferred by inspecting the libpng source.
XVI. Y2K Compliance in libpng
-August 19, 2015
+September 24, 2015
Since the PNG Development group is an ad-hoc body, we can't make
an official declaration.
diff --git a/libpng.3 b/libpng.3
index c71ff4822..82802642d 100644
--- a/libpng.3
+++ b/libpng.3
@@ -1,4 +1,4 @@
-.TH LIBPNG 3 "August 19, 2015"
+.TH LIBPNG 3 "September 24, 2015"
.SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.19beta03
.SH SYNOPSIS
@@ -277,6 +277,8 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.19beta03
\fBvoid png_set_add_alpha (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
+\fBvoid png_set_add_alpha_16 (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
+
\fBvoid png_set_alpha_mode (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImode\fP\fB, double \fIoutput_gamma\fP\fB);\fP
\fBvoid png_set_alpha_mode_fixed (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImode\fP\fB, png_fixed_point \fIoutput_gamma\fP\fB);\fP
@@ -325,6 +327,8 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.19beta03
\fBvoid png_set_filler (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
+\fBvoid png_set_filler_16 (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
+
\fBvoid png_set_filter (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImethod\fP\fB, int \fIfilters\fP\fB);\fP
\fBvoid png_set_filter_heuristics (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_doublep \fP\fIfilter_weights\fP\fB, png_doublep \fIfilter_costs\fP\fB);\fP
@@ -508,7 +512,7 @@ Following is a copy of the libpng-manual.txt file that accompanies libpng.
.SH LIBPNG.TXT
libpng-manual.txt - A description on how to use and modify libpng
- libpng version 1.6.19beta03 - August 19, 2015
+ libpng version 1.6.19beta03 - September 24, 2015
Updated and distributed by Glenn Randers-Pehrson
<glennrp at users.sourceforge.net>
Copyright (c) 1998-2015 Glenn Randers-Pehrson
@@ -519,7 +523,7 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
- libpng versions 0.97, January 1998, through 1.6.19beta03 - August 19, 2015
+ libpng versions 0.97, January 1998, through 1.6.19beta03 - September 24, 2015
Updated and distributed by Glenn Randers-Pehrson
Copyright (c) 1998-2015 Glenn Randers-Pehrson
@@ -2193,17 +2197,21 @@ described below.
Data will be decoded into the supplied row buffers packed into bytes
unless the library has been told to transform it into another format.
For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called. 8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
+2 pixels/byte with the leftmost pixel in the high-order bits of the byte,
+unless png_set_packing() is called. 8-bit RGB data will be stored
+in RGB RGB RGB format unless png_set_filler_16() or png_set_add_alpha_16()
is called to insert filler bytes, either before or after each RGB triplet.
+
16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
byte of the color value first, unless png_set_scale_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
-be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
-or png_set_scale_16().
+transform it to regular RGB RGB triplets, or png_set_filler_16() or
+png_set_add alpha_16() is called to insert trwo filler bytes, either before
+or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data
+can be modified with png_set_filler_16(), png_set_add_alpha_16(),
+png_set_strip_16(), or png_set_scale_16(). Note that png_set_filler_16()
+and png_set_add_alpha_16(), which can be used with either 8-bit or 16-bit
+images have replaced the png_set_filler() and png_set_add_alpha() functions,
+which only work properly with 8-bit data.
The following code transforms grayscale images of less than 8 to 8 bits,
changes paletted images to RGB, and adds a full alpha channel if there is
@@ -2293,7 +2301,7 @@ Within the matrix,
"-" means the transformation is not supported.
"." means nothing is necessary (a tRNS chunk can just be ignored).
"t" means the transformation is obtained by png_set_tRNS.
- "A" means the transformation is obtained by png_set_add_alpha().
+ "A" means the transformation is obtained by png_set_add_alpha_16().
"X" means the transformation is obtained by png_set_expand().
"1" means the transformation is obtained by
png_set_expand_gray_1_2_4_to_8() (and by png_set_expand()
@@ -2356,24 +2364,26 @@ PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
into 4 or 8 bytes for windowing systems that need them in this format:
if (color_type == PNG_COLOR_TYPE_RGB)
- png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
+ png_set_filler_16(png_ptr, filler, PNG_FILLER_BEFORE);
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
+where "filler" is the 8-bit or 16-bit number to fill with, and the location
+is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
you want the filler before the RGB or after. This transformation
does not affect images that already have full alpha channels. To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
+opaque alpha channel, use filler=0xffff and PNG_FILLER_AFTER which
will generate RGBA pixels.
-Note that png_set_filler() does not change the color type. If you want
+Note that png_set_filler_16() does not change the color type. If you want
to do that, you can add a true alpha channel with
if (color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_GRAY)
- png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
+ png_set_add_alpha_16(png_ptr, filler, PNG_FILLER_AFTER);
where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
+The png_set_alpha() function was added in libpng-1.2.7 and the
+png_set_alpha_16() function, which can be used for either 8-bit or
+16-bit images, was added in libpng-1.5.24.
If you are reading an image with an alpha channel, and you need the
data as ARGB instead of the normal PNG format RGBA:
@@ -5412,7 +5422,13 @@ limits are now
png_user_chunk_malloc_max 0 (unlimited) 8,000,000
The png_set_option() function (and the "options" member of the png struct) was
-added to libpng-1.5.15.
+added to libpng-1.5.15, with option PNG_ARM_NEON.
+
+The png_set_filler_16() and png_set_add_alpha_16() functions were added
+at libpng-1.5.24 and libpng-1.6.19. These replace the png_set_filler(() and
+the png_set_add_alpha() functions, which did not work properly with 16-bit
+images. The new functions can be used with either 8-bit or 16-bit images,
+while the old functions are still available for use only with 8-bit images.
The library now supports a complete fixed point implementation and can
thus be used on systems that have no floating point support or very
@@ -5820,7 +5836,7 @@ Other rules can be inferred by inspecting the libpng source.
.SH XVI. Y2K Compliance in libpng
-August 19, 2015
+September 24, 2015
Since the PNG Development group is an ad-hoc body, we can't make
an official declaration.
@@ -6141,7 +6157,7 @@ possible without all of you.
Thanks to Frank J. T. Wojcik for helping with the documentation.
-Libpng version 1.6.19beta03 - August 19, 2015:
+Libpng version 1.6.19beta03 - September 24, 2015:
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
@@ -6164,7 +6180,7 @@ this sentence.
This code is released under the libpng license.
-libpng versions 1.0.7, July 1, 2000, through 1.6.19beta03, August 19, 2015, are
+libpng versions 1.0.7, July 1, 2000, through 1.6.19beta03, September 24, 2015, are
Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-1.0.6
with the following individuals added to the list of Contributing Authors:
@@ -6258,7 +6274,7 @@ the additional disclaimers inserted at version 1.0.7.
Glenn Randers-Pehrson
glennrp at users.sourceforge.net
-August 19, 2015
+September 24, 2015
.\" end of man page
diff --git a/png.h b/png.h
index 04638e4de..34fa0254c 100644
--- a/png.h
+++ b/png.h
@@ -1,7 +1,7 @@
/* png.h - header file for PNG reference library
*
- * libpng version 1.6.19beta03, August 19, 2015
+ * libpng version 1.6.19beta03, September 24, 2015
*
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -12,7 +12,7 @@
* Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
- * libpng versions 0.97, January 1998, through 1.6.19beta03, August 19, 2015: Glenn
+ * libpng versions 0.97, January 1998, through 1.6.19beta03, September 24, 2015: Glenn
* See also "Contributing Authors", below.
*
* Note about libpng version numbers:
@@ -251,7 +251,7 @@
*
* This code is released under the libpng license.
*
- * libpng versions 1.0.7, July 1, 2000, through 1.6.19beta03, August 19, 2015, are
+ * libpng versions 1.0.7, July 1, 2000, through 1.6.19beta03, September 24, 2015, are
* Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are
* distributed according to the same disclaimer and license as libpng-1.0.6
* with the following individuals added to the list of Contributing Authors:
@@ -360,7 +360,7 @@
* Y2K compliance in libpng:
* =========================
*
- * August 19, 2015
+ * September 24, 2015
*
* Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration.
@@ -430,7 +430,7 @@
/* Version information for png.h - this should match the version in png.c */
#define PNG_LIBPNG_VER_STRING "1.6.19beta03"
#define PNG_HEADER_VERSION_STRING \
- " libpng version 1.6.19beta03 - August 19, 2015\n"
+ " libpng version 1.6.19beta03 - September 24, 2015\n"
#define PNG_LIBPNG_VER_SONUM 16
#define PNG_LIBPNG_VER_DLLNUM 16
@@ -1396,12 +1396,18 @@ PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr));
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler,
int flags));
+/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
+PNG_EXPORT(245, void, png_set_filler_16, (png_structrp png_ptr,
+ png_uint_32 filler, int flags));
/* The values of the PNG_FILLER_ defines should NOT be changed */
# define PNG_FILLER_BEFORE 0
# define PNG_FILLER_AFTER 1
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr,
png_uint_32 filler, int flags));
+/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */
+PNG_EXPORT(246, void, png_set_add_alpha_16, (png_structrp png_ptr,
+ png_uint_32 filler, int flags));
#endif /* READ_FILLER || WRITE_FILLER */
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
@@ -3264,7 +3270,7 @@ PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option,
* one to use is one more than this.)
*/
#ifdef PNG_EXPORT_LAST_ORDINAL
- PNG_EXPORT_LAST_ORDINAL(244);
+ PNG_EXPORT_LAST_ORDINAL(246);
#endif
#ifdef __cplusplus
diff --git a/pngpriv.h b/pngpriv.h
index c466d4bfe..7a549140c 100644
--- a/pngpriv.h
+++ b/pngpriv.h
@@ -599,6 +599,7 @@
#define PNG_FLAG_BENIGN_ERRORS_WARN 0x100000 /* Added to libpng-1.4.0 */
#define PNG_FLAG_APP_WARNINGS_WARN 0x200000 /* Added to libpng-1.6.0 */
#define PNG_FLAG_APP_ERRORS_WARN 0x400000 /* Added to libpng-1.6.0 */
+#define PNG_FLAG_FILLER_16 0x800000 /* old filler byte order */
/* 0x800000 unused */
/* 0x1000000 unused */
/* 0x2000000 unused */
diff --git a/pngread.c b/pngread.c
index 48aae8488..1b1bdbfe5 100644
--- a/pngread.c
+++ b/pngread.c
@@ -3860,7 +3860,7 @@ png_image_read_direct(png_voidp argument)
# endif
where = PNG_FILLER_AFTER;
- png_set_add_alpha(png_ptr, filler, where);
+ png_set_add_alpha_16(png_ptr, filler, where);
}
/* This stops the (irrelevant) call to swap_alpha below. */
diff --git a/pngrtran.c b/pngrtran.c
index 284226aeb..208f4ceab 100644
--- a/pngrtran.c
+++ b/pngrtran.c
@@ -2660,10 +2660,17 @@ png_do_read_filler(png_row_infop row_info, png_bytep row,
png_uint_32 i;
png_uint_32 row_width = row_info->width;
+ png_byte lo_filler = (png_byte)filler;
+
#ifdef PNG_READ_16BIT_SUPPORTED
png_byte hi_filler = (png_byte)(filler>>8);
+ if (((flags & PNG_FLAG_FILLER_16) == 0) && row_info->bit_depth == 16)
+ {
+ /* filler bytes were read in the wrong order prior to libpng-1.5.24 */
+ lo_filler = hi_filler;
+ hi_filler = (png_byte)filler;
+ }
#endif
- png_byte lo_filler = (png_byte)filler;
png_debug(1, "in png_do_read_filler");
diff --git a/pngtrans.c b/pngtrans.c
index 0c0d92d8f..4e184067d 100644
--- a/pngtrans.c
+++ b/pngtrans.c
@@ -119,7 +119,17 @@ png_set_interlace_handling(png_structrp png_ptr)
void PNGAPI
png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
{
- png_debug(1, "in png_set_filler");
+ if (png_ptr == NULL)
+ return;
+ png_set_filler_16(png_ptr, filler, filler_loc);
+ png_ptr->flags &= ~PNG_FLAG_FILLER_16; /* Wrong byte order */
+}
+
+/* Added to libpng-1.5.24 */
+void PNGAPI
+png_set_filler_16(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
+{
+ png_debug(1, "in png_set_filler_16");
if (png_ptr == NULL)
return;
@@ -139,6 +149,7 @@ png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
* confusion in the past.) The filler is only used in the read code.
*/
png_ptr->filler = (png_uint_16)filler;
+ png_ptr->flags |= PNG_FLAG_FILLER_16; /* Correct byte order */
# else
png_app_error(png_ptr, "png_set_filler not supported on read");
PNG_UNUSED(filler) /* not used in the write case */
@@ -203,12 +214,23 @@ png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
void PNGAPI
png_set_add_alpha(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
{
+ if (png_ptr == NULL)
+ return;
+
+ png_set_add_alpha_16(png_ptr, filler, filler_loc);
+ png_ptr->flags &= ~PNG_FLAG_FILLER_16; /* Wrong byte order */
+}
+
+/* Added to libpng-1.5.24 */
+void PNGAPI
+png_set_add_alpha_16(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
+{
png_debug(1, "in png_set_add_alpha");
if (png_ptr == NULL)
return;
- png_set_filler(png_ptr, filler, filler_loc);
+ png_set_filler_16(png_ptr, filler, filler_loc);
/* The above may fail to do anything. */
if ((png_ptr->transformations & PNG_FILLER) != 0)
png_ptr->transformations |= PNG_ADD_ALPHA;
diff --git a/pngwrite.c b/pngwrite.c
index 2da3f01f3..992f48b77 100644
--- a/pngwrite.c
+++ b/pngwrite.c
@@ -1396,11 +1396,11 @@ png_write_png(png_structrp png_ptr, png_inforp info_ptr,
"PNG_TRANSFORM_STRIP_FILLER: BEFORE+AFTER not supported");
/* Continue if ignored - this is the pre-1.6.10 behavior */
- png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
+ png_set_filler_16(png_ptr, 0, PNG_FILLER_AFTER);
}
else if ((transforms & PNG_TRANSFORM_STRIP_FILLER_BEFORE) != 0)
- png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
+ png_set_filler_16(png_ptr, 0, PNG_FILLER_BEFORE);
#else
png_app_error(png_ptr, "PNG_TRANSFORM_STRIP_FILLER not supported");
#endif
diff --git a/scripts/symbols.def b/scripts/symbols.def
index d36b59035..f4e90092f 100644
--- a/scripts/symbols.def
+++ b/scripts/symbols.def
@@ -249,3 +249,5 @@ EXPORTS
png_set_check_for_invalid_index @242
png_get_palette_max @243
png_set_option @244
+ png_set_filler_16 @245
+ png_set_add_alpha_16 @246