summaryrefslogtreecommitdiff
path: root/pngtrans.c
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 /pngtrans.c
parentd6eb4b71aceb7d6059b58180332d7b71ed71d0c2 (diff)
[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.
Diffstat (limited to 'pngtrans.c')
-rw-r--r--pngtrans.c26
1 files changed, 24 insertions, 2 deletions
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;