mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
[libpng15] Fixes for multiple calls to png_read_update_info.
These fixes attend to most of the errors revealed in pngvalid, however doing the gamma work twice results in inaccuracies that can't be easily fixed. There is now a warning in the code if this is going to happen.
This commit is contained in:
parent
5c1905caae
commit
07772cba07
4
ANNOUNCE
4
ANNOUNCE
@ -74,6 +74,10 @@ Version 1.5.6beta06 [October 14, 2011]
|
|||||||
Removed two redundant tests for unitialized row.
|
Removed two redundant tests for unitialized row.
|
||||||
Fixed a relatively harmless memory overwrite in compressed text writing
|
Fixed a relatively harmless memory overwrite in compressed text writing
|
||||||
with a 1 byte zlib buffer.
|
with a 1 byte zlib buffer.
|
||||||
|
Fixes for multiple calls to png_read_update_info. These fixes attend to
|
||||||
|
most of the errors revealed in pngvalid, however doing the gamma work
|
||||||
|
twice results in inaccuracies that can't be easily fixed. There is now
|
||||||
|
a warning in the code if this is going to happen.
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net:
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net:
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
|
|||||||
4
CHANGES
4
CHANGES
@ -3635,6 +3635,10 @@ Version 1.5.6beta06 [October 14, 2011]
|
|||||||
Removed two redundant tests for unitialized row.
|
Removed two redundant tests for unitialized row.
|
||||||
Fixed a relatively harmless memory overwrite in compressed text writing
|
Fixed a relatively harmless memory overwrite in compressed text writing
|
||||||
with a 1 byte zlib buffer.
|
with a 1 byte zlib buffer.
|
||||||
|
Fixes for multiple calls to png_read_update_info. These fixes attend to
|
||||||
|
most of the errors revealed in pngvalid, however doing the gamma work
|
||||||
|
twice results in inaccuracies that can't be easily fixed. There is now
|
||||||
|
a warning in the code if this is going to happen.
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
|
|||||||
70
png.c
70
png.c
@ -645,13 +645,13 @@ png_get_copyright(png_const_structp png_ptr)
|
|||||||
#else
|
#else
|
||||||
# ifdef __STDC__
|
# ifdef __STDC__
|
||||||
return PNG_STRING_NEWLINE \
|
return PNG_STRING_NEWLINE \
|
||||||
"libpng version 1.5.6beta06 - October 12, 2011" PNG_STRING_NEWLINE \
|
"libpng version 1.5.6beta06 - October 14, 2011" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1998-2011 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
|
"Copyright (c) 1998-2011 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.5.6beta06 - October 12, 2011\
|
return "libpng version 1.5.6beta06 - October 14, 2011\
|
||||||
Copyright (c) 1998-2011 Glenn Randers-Pehrson\
|
Copyright (c) 1998-2011 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.";
|
||||||
@ -2663,6 +2663,60 @@ png_build_8bit_table(png_structp png_ptr, png_bytepp ptable,
|
|||||||
table[i] = (png_byte)i;
|
table[i] = (png_byte)i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Used from png_read_destroy and below to release the memory used by the gamma
|
||||||
|
* tables.
|
||||||
|
*/
|
||||||
|
void /* PRIVATE */
|
||||||
|
png_destroy_gamma_table(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_table);
|
||||||
|
png_ptr->gamma_table = NULL;
|
||||||
|
|
||||||
|
if (png_ptr->gamma_16_table != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int istop = (1 << (8 - png_ptr->gamma_shift));
|
||||||
|
for (i = 0; i < istop; i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_table[i]);
|
||||||
|
}
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_table);
|
||||||
|
png_ptr->gamma_16_table = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->gamma_from_1);
|
||||||
|
png_ptr->gamma_from_1 = NULL;
|
||||||
|
png_free(png_ptr, png_ptr->gamma_to_1);
|
||||||
|
png_ptr->gamma_to_1 = NULL;
|
||||||
|
|
||||||
|
if (png_ptr->gamma_16_from_1 != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int istop = (1 << (8 - png_ptr->gamma_shift));
|
||||||
|
for (i = 0; i < istop; i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
|
||||||
|
}
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_from_1);
|
||||||
|
png_ptr->gamma_16_from_1 = NULL;
|
||||||
|
}
|
||||||
|
if (png_ptr->gamma_16_to_1 != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int istop = (1 << (8 - png_ptr->gamma_shift));
|
||||||
|
for (i = 0; i < istop; i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
|
||||||
|
}
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_to_1);
|
||||||
|
png_ptr->gamma_16_to_1 = NULL;
|
||||||
|
}
|
||||||
|
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
||||||
|
}
|
||||||
|
|
||||||
/* We build the 8- or 16-bit gamma tables here. Note that for 16-bit
|
/* We build the 8- or 16-bit gamma tables here. Note that for 16-bit
|
||||||
* tables, we don't make a full table if we are reducing to 8-bit in
|
* tables, we don't make a full table if we are reducing to 8-bit in
|
||||||
* the future. Note also how the gamma_16 tables are segmented so that
|
* the future. Note also how the gamma_16 tables are segmented so that
|
||||||
@ -2673,6 +2727,18 @@ png_build_gamma_table(png_structp png_ptr, int bit_depth)
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_build_gamma_table");
|
png_debug(1, "in png_build_gamma_table");
|
||||||
|
|
||||||
|
/* Remove any existing table; this copes with multiple calls to
|
||||||
|
* png_read_update_info. The warning is because building the gamma tables
|
||||||
|
* multiple times is a performance hit - it's harmless but the ability to call
|
||||||
|
* png_read_update_info() multiple times is new in 1.5.6 so it seems sensible
|
||||||
|
* to warn if the app introduces such a hit.
|
||||||
|
*/
|
||||||
|
if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "gamma table being rebuilt");
|
||||||
|
png_destroy_gamma_table(png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
if (bit_depth <= 8)
|
if (bit_depth <= 8)
|
||||||
{
|
{
|
||||||
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
|
||||||
|
|||||||
@ -1568,6 +1568,7 @@ PNG_EXTERN png_uint_16 png_gamma_16bit_correct PNGARG((unsigned int value,
|
|||||||
png_fixed_point gamma_value));
|
png_fixed_point gamma_value));
|
||||||
PNG_EXTERN png_byte png_gamma_8bit_correct PNGARG((unsigned int value,
|
PNG_EXTERN png_byte png_gamma_8bit_correct PNGARG((unsigned int value,
|
||||||
png_fixed_point gamma_value));
|
png_fixed_point gamma_value));
|
||||||
|
PNG_EXTERN void png_destroy_gamma_table(png_structp png_ptr);
|
||||||
PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr,
|
PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr,
|
||||||
int bit_depth));
|
int bit_depth));
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
49
pngread.c
49
pngread.c
@ -1032,6 +1032,10 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr,
|
|||||||
if (end_info_ptr != NULL)
|
if (end_info_ptr != NULL)
|
||||||
png_info_destroy(png_ptr, end_info_ptr);
|
png_info_destroy(png_ptr, end_info_ptr);
|
||||||
|
|
||||||
|
#ifdef PNG_READ_GAMMA_SUPPORTED
|
||||||
|
png_destroy_gamma_table(png_ptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
png_free(png_ptr, png_ptr->zbuf);
|
png_free(png_ptr, png_ptr->zbuf);
|
||||||
png_free(png_ptr, png_ptr->big_row_buf);
|
png_free(png_ptr, png_ptr->big_row_buf);
|
||||||
png_free(png_ptr, png_ptr->prev_row);
|
png_free(png_ptr, png_ptr->prev_row);
|
||||||
@ -1042,15 +1046,6 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr,
|
|||||||
png_free(png_ptr, png_ptr->quantize_index);
|
png_free(png_ptr, png_ptr->quantize_index);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_GAMMA_SUPPORTED
|
|
||||||
png_free(png_ptr, png_ptr->gamma_table);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PNG_READ_BACKGROUND_SUPPORTED
|
|
||||||
png_free(png_ptr, png_ptr->gamma_from_1);
|
|
||||||
png_free(png_ptr, png_ptr->gamma_to_1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (png_ptr->free_me & PNG_FREE_PLTE)
|
if (png_ptr->free_me & PNG_FREE_PLTE)
|
||||||
png_zfree(png_ptr, png_ptr->palette);
|
png_zfree(png_ptr, png_ptr->palette);
|
||||||
png_ptr->free_me &= ~PNG_FREE_PLTE;
|
png_ptr->free_me &= ~PNG_FREE_PLTE;
|
||||||
@ -1068,42 +1063,6 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr,
|
|||||||
png_ptr->free_me &= ~PNG_FREE_HIST;
|
png_ptr->free_me &= ~PNG_FREE_HIST;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_GAMMA_SUPPORTED
|
|
||||||
if (png_ptr->gamma_16_table != NULL)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int istop = (1 << (8 - png_ptr->gamma_shift));
|
|
||||||
for (i = 0; i < istop; i++)
|
|
||||||
{
|
|
||||||
png_free(png_ptr, png_ptr->gamma_16_table[i]);
|
|
||||||
}
|
|
||||||
png_free(png_ptr, png_ptr->gamma_16_table);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef PNG_READ_BACKGROUND_SUPPORTED
|
|
||||||
if (png_ptr->gamma_16_from_1 != NULL)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int istop = (1 << (8 - png_ptr->gamma_shift));
|
|
||||||
for (i = 0; i < istop; i++)
|
|
||||||
{
|
|
||||||
png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
|
|
||||||
}
|
|
||||||
png_free(png_ptr, png_ptr->gamma_16_from_1);
|
|
||||||
}
|
|
||||||
if (png_ptr->gamma_16_to_1 != NULL)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int istop = (1 << (8 - png_ptr->gamma_shift));
|
|
||||||
for (i = 0; i < istop; i++)
|
|
||||||
{
|
|
||||||
png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
|
|
||||||
}
|
|
||||||
png_free(png_ptr, png_ptr->gamma_16_to_1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inflateEnd(&png_ptr->zstream);
|
inflateEnd(&png_ptr->zstream);
|
||||||
|
|
||||||
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
||||||
|
|||||||
56
pngrtran.c
56
pngrtran.c
@ -1641,8 +1641,9 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
/* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
|
/* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
|
||||||
else /* color_type != PNG_COLOR_TYPE_PALETTE */
|
else /* color_type != PNG_COLOR_TYPE_PALETTE */
|
||||||
{
|
{
|
||||||
png_fixed_point g = PNG_FP_1;
|
int gs_sig, g_sig;
|
||||||
png_fixed_point gs = PNG_FP_1;
|
png_fixed_point g = PNG_FP_1; /* Correction to linear */
|
||||||
|
png_fixed_point gs = PNG_FP_1; /* Correction to screen */
|
||||||
|
|
||||||
switch (png_ptr->background_gamma_type)
|
switch (png_ptr->background_gamma_type)
|
||||||
{
|
{
|
||||||
@ -1666,34 +1667,45 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
png_error(png_ptr, "invalid background gamma type");
|
png_error(png_ptr, "invalid background gamma type");
|
||||||
}
|
}
|
||||||
|
|
||||||
png_ptr->background_1.gray = png_gamma_correct(png_ptr,
|
g_sig = png_gamma_significant(g);
|
||||||
png_ptr->background.gray, g);
|
gs_sig = png_gamma_significant(gs);
|
||||||
|
|
||||||
png_ptr->background.gray = png_gamma_correct(png_ptr,
|
if (g_sig)
|
||||||
png_ptr->background.gray, gs);
|
png_ptr->background_1.gray = png_gamma_correct(png_ptr,
|
||||||
|
png_ptr->background.gray, g);
|
||||||
|
|
||||||
|
if (gs_sig)
|
||||||
|
png_ptr->background.gray = png_gamma_correct(png_ptr,
|
||||||
|
png_ptr->background.gray, gs);
|
||||||
|
|
||||||
if ((png_ptr->background.red != png_ptr->background.green) ||
|
if ((png_ptr->background.red != png_ptr->background.green) ||
|
||||||
(png_ptr->background.red != png_ptr->background.blue) ||
|
(png_ptr->background.red != png_ptr->background.blue) ||
|
||||||
(png_ptr->background.red != png_ptr->background.gray))
|
(png_ptr->background.red != png_ptr->background.gray))
|
||||||
{
|
{
|
||||||
/* RGB or RGBA with color background */
|
/* RGB or RGBA with color background */
|
||||||
png_ptr->background_1.red = png_gamma_correct(png_ptr,
|
if (g_sig)
|
||||||
png_ptr->background.red, g);
|
{
|
||||||
|
png_ptr->background_1.red = png_gamma_correct(png_ptr,
|
||||||
|
png_ptr->background.red, g);
|
||||||
|
|
||||||
png_ptr->background_1.green = png_gamma_correct(png_ptr,
|
png_ptr->background_1.green = png_gamma_correct(png_ptr,
|
||||||
png_ptr->background.green, g);
|
png_ptr->background.green, g);
|
||||||
|
|
||||||
png_ptr->background_1.blue = png_gamma_correct(png_ptr,
|
png_ptr->background_1.blue = png_gamma_correct(png_ptr,
|
||||||
png_ptr->background.blue, g);
|
png_ptr->background.blue, g);
|
||||||
|
}
|
||||||
|
|
||||||
png_ptr->background.red = png_gamma_correct(png_ptr,
|
if (gs_sig)
|
||||||
png_ptr->background.red, gs);
|
{
|
||||||
|
png_ptr->background.red = png_gamma_correct(png_ptr,
|
||||||
|
png_ptr->background.red, gs);
|
||||||
|
|
||||||
png_ptr->background.green = png_gamma_correct(png_ptr,
|
png_ptr->background.green = png_gamma_correct(png_ptr,
|
||||||
png_ptr->background.green, gs);
|
png_ptr->background.green, gs);
|
||||||
|
|
||||||
png_ptr->background.blue = png_gamma_correct(png_ptr,
|
png_ptr->background.blue = png_gamma_correct(png_ptr,
|
||||||
png_ptr->background.blue, gs);
|
png_ptr->background.blue, gs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -1705,6 +1717,9 @@ png_init_read_transformations(png_structp png_ptr)
|
|||||||
png_ptr->background.red = png_ptr->background.green
|
png_ptr->background.red = png_ptr->background.green
|
||||||
= png_ptr->background.blue = png_ptr->background.gray;
|
= png_ptr->background.blue = png_ptr->background.gray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The background is now in screen gamma: */
|
||||||
|
png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_SCREEN;
|
||||||
} /* color_type != PNG_COLOR_TYPE_PALETTE */
|
} /* color_type != PNG_COLOR_TYPE_PALETTE */
|
||||||
}/* png_ptr->transformations & PNG_BACKGROUND */
|
}/* png_ptr->transformations & PNG_BACKGROUND */
|
||||||
|
|
||||||
@ -3404,7 +3419,8 @@ png_build_grayscale_palette(int bit_depth, png_colorp palette)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
#ifdef PNG_READ_BACKGROUND_SUPPORTED
|
#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\
|
||||||
|
(defined PNG_READ_ALPHA_MODE_SUPPORTED)
|
||||||
/* Replace any alpha or transparency with the supplied background color.
|
/* Replace any alpha or transparency with the supplied background color.
|
||||||
* "background" is already in the screen gamma, while "background_1" is
|
* "background" is already in the screen gamma, while "background_1" is
|
||||||
* at a gamma of 1.0. Paletted files have already been taken care of.
|
* at a gamma of 1.0. Paletted files have already been taken care of.
|
||||||
@ -4112,7 +4128,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_READ_ALPHA_MODE_SUPPORTED */
|
||||||
|
|
||||||
#ifdef PNG_READ_GAMMA_SUPPORTED
|
#ifdef PNG_READ_GAMMA_SUPPORTED
|
||||||
/* Gamma correct the image, avoiding the alpha channel. Make sure
|
/* Gamma correct the image, avoiding the alpha channel. Make sure
|
||||||
|
|||||||
10
pngstruct.h
10
pngstruct.h
@ -157,19 +157,21 @@ struct png_struct_def
|
|||||||
png_uint_32 flush_rows; /* number of rows written since last flush */
|
png_uint_32 flush_rows; /* number of rows written since last flush */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
#ifdef PNG_READ_GAMMA_SUPPORTED
|
||||||
int gamma_shift; /* number of "insignificant" bits in 16-bit gamma */
|
int gamma_shift; /* number of "insignificant" bits in 16-bit gamma */
|
||||||
png_fixed_point gamma; /* file gamma value */
|
png_fixed_point gamma; /* file gamma value */
|
||||||
png_fixed_point screen_gamma; /* screen gamma value (display_exponent) */
|
png_fixed_point screen_gamma; /* screen gamma value (display_exponent) */
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
|
||||||
png_bytep gamma_table; /* gamma table for 8-bit depth files */
|
png_bytep gamma_table; /* gamma table for 8-bit depth files */
|
||||||
|
png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
|
||||||
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
png_bytep gamma_from_1; /* converts from 1.0 to screen */
|
png_bytep gamma_from_1; /* converts from 1.0 to screen */
|
||||||
png_bytep gamma_to_1; /* converts from file to 1.0 */
|
png_bytep gamma_to_1; /* converts from file to 1.0 */
|
||||||
png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
|
|
||||||
png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
|
png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
|
||||||
png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
|
png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
|
||||||
|
#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
|
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
|
||||||
|
|||||||
@ -7748,7 +7748,7 @@ gamma_component_validate(PNG_CONST char *name, PNG_CONST validate_info *vi,
|
|||||||
case ALPHA_MODE_OFFSET + PNG_ALPHA_BROKEN:
|
case ALPHA_MODE_OFFSET + PNG_ALPHA_BROKEN:
|
||||||
case ALPHA_MODE_OFFSET + PNG_ALPHA_OPTIMIZED:
|
case ALPHA_MODE_OFFSET + PNG_ALPHA_OPTIMIZED:
|
||||||
# endif /* ALPHA_MODE_SUPPORTED */
|
# endif /* ALPHA_MODE_SUPPORTED */
|
||||||
do_compose = (alpha >= 0 && alpha < 1);
|
do_compose = (alpha > 0 && alpha < 1);
|
||||||
use_input = (alpha != 0);
|
use_input = (alpha != 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -9,11 +9,11 @@ echo "============ pngvalid-full.sh ==============" >> pngtest-log.txt
|
|||||||
echo "Running test-pngvalid-full.sh"
|
echo "Running test-pngvalid-full.sh"
|
||||||
for gamma in threshold transform sbit 16-to-8 background alpha-mode "transform --expand16" "background --expand16" "alpha-mode --expand16"
|
for gamma in threshold transform sbit 16-to-8 background alpha-mode "transform --expand16" "background --expand16" "alpha-mode --expand16"
|
||||||
do
|
do
|
||||||
if ./pngvalid --gamma-$gamma >> pngtest-log.txt 2>&1
|
if ./pngvalid "$@" --gamma-$gamma >> pngtest-log.txt 2>&1
|
||||||
then
|
then
|
||||||
echo " PASS:" pngvalid "--gamma-$gamma"
|
echo " PASS: pngvalid" "$@" "--gamma-$gamma"
|
||||||
else
|
else
|
||||||
echo " FAIL:" pngvalid "--gamma-$gamma"
|
echo " FAIL: pngvalid" "$@" "--gamma-$gamma"
|
||||||
err=1
|
err=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@ -18,11 +18,11 @@ for opts in "--standard" "--standard --progressive-read" \
|
|||||||
"--size" "--size --progressive-read" \
|
"--size" "--size --progressive-read" \
|
||||||
"--transform"
|
"--transform"
|
||||||
do
|
do
|
||||||
if ./pngvalid $opts >> pngtest-log.txt 2>&1
|
if ./pngvalid "$@" $opts >> pngtest-log.txt 2>&1
|
||||||
then
|
then
|
||||||
echo " PASS:" pngvalid $opts
|
echo " PASS: pngvalid" "$@" $opts
|
||||||
else
|
else
|
||||||
echo " FAIL:" pngvalid $opts
|
echo " FAIL: pngvalid" "$@" $opts
|
||||||
err=1
|
err=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user