diff options
author | Glenn Randers-Pehrson <glennrp at users.sourceforge.net> | 2015-09-23 22:08:04 -0500 |
---|---|---|
committer | Glenn Randers-Pehrson <glennrp at users.sourceforge.net> | 2015-09-23 22:08:04 -0500 |
commit | efe4e5d10d3afc5983cdd7733f8d38f855ed3f9b (patch) | |
tree | e89520a7f47a1bb2ad9764a758d37fd2a131253d /pngtrans.c | |
parent | d6eb4b71aceb7d6059b58180332d7b71ed71d0c2 (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.c | 26 |
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; |