From e1c7c0402c07466d227a5fa37cb148771859ee5e Mon Sep 17 00:00:00 2001 From: Glenn Randers-Pehrson Date: Sat, 1 Oct 2016 20:09:52 -0500 Subject: [PATCH] [libpng17] Quieted warnings from clang-3.8 in pngunknown.c and pngvalid.c. --- ANNOUNCE | 5 +++-- CHANGES | 3 ++- contrib/libtests/pngunknown.c | 4 ++-- contrib/libtests/pngvalid.c | 41 +++++++++++++++++++++++------------ 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/ANNOUNCE b/ANNOUNCE index c7f907924..e68c94d80 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.7.0beta85 - September 26, 2016 +Libpng 1.7.0beta85 - October 2, 2016 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. @@ -1408,8 +1408,9 @@ Version 1.7.0beta84 [September 26, 2016] Issue png_benign_error() on ADLER32 checksum mismatch instead of png_error(). Add tests/badcrc.png and tests/badadler.png to tests/pngtest. -Version 1.7.0beta85 [September 26, 2016] +Version 1.7.0beta85 [October 2, 2016] Updated the documentation about CRC and ADLER32 handling. + Quieted warnings from clang-3.8 in pngunknown.c and pngvalid.c. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/CHANGES b/CHANGES index 55535a33a..9232ffb63 100644 --- a/CHANGES +++ b/CHANGES @@ -5708,8 +5708,9 @@ Version 1.7.0beta84 [September 26, 2016] Issue png_benign_error() on ADLER32 checksum mismatch instead of png_error(). Add tests/badcrc.png and tests/badadler.png to tests/pngtest. -Version 1.7.0beta85 [September 26, 2016] +Version 1.7.0beta85 [October 2, 2016] Updated the documentation about CRC and ADLER32 handling. + Quieted warnings from clang-3.8 in pngunknown.c and pngvalid.c. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/contrib/libtests/pngunknown.c b/contrib/libtests/pngunknown.c index 8b1528296..b27b07563 100644 --- a/contrib/libtests/pngunknown.c +++ b/contrib/libtests/pngunknown.c @@ -1,7 +1,7 @@ /* pngunknown.c - test the read side unknown chunk handling * - * Last changed in libpng 1.6.22 [May 26, 2016] + * Last changed in libpng 1.6.26 [(PENDING RELEASE)] * Copyright (c) 2015,2016 Glenn Randers-Pehrson * Written by John Cunningham Bowler * @@ -478,7 +478,7 @@ get_valid(display *d, png_infop info_ptr) png_textp text; png_uint_32 ntext = png_get_text(d->png_ptr, info_ptr, &text, NULL); - while (ntext-- > 0) switch (text[ntext].compression) + while (ntext > 0) switch (text[--ntext].compression) { case -1: flags |= PNG_INFO_tEXt; diff --git a/contrib/libtests/pngvalid.c b/contrib/libtests/pngvalid.c index 585d113d6..1c45b615a 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.24 [(PENDING RELEASE)] + * Last changed in libpng 1.6.26 [(PENDING RELEASE)] * Copyright (c) 2014-2016 Glenn Randers-Pehrson * Written by John Cunningham Bowler * @@ -1242,7 +1242,7 @@ store_image_check(const png_store* ps, png_const_structp pp, int iImage) image += 2; /* skip image first row markers */ - while (rows-- > 0) + for (; rows > 0; --rows) { if (image[-2] != 190 || image[-1] != 239) png_error(pp, "row start overwritten"); @@ -11427,23 +11427,36 @@ perform_interlace_macro_validation(void) */ for (v=0;;) { + /* The first two tests overflow if the pass row or column is outside + * the possible range for a 32-bit result. In fact the values should + * never be outside the range for a 31-bit result, but checking for 32 + * bits here ensures that if an app uses a bogus pass row or column + * (just so long as it fits in a 32 bit integer) it won't get a + * possibly dangerous overflow. + */ /* First the base 0 stuff: */ - m = PNG_ROW_FROM_PASS_ROW(v, pass); - f = png_row_from_pass_row(v, pass); - if (m != f) + if (v < png_pass_rows(0xFFFFFFFFU, pass)) { - fprintf(stderr, "PNG_ROW_FROM_PASS_ROW(%u, %d) = %u != %x\n", - v, pass, m, f); - exit(99); + m = PNG_ROW_FROM_PASS_ROW(v, pass); + f = png_row_from_pass_row(v, pass); + if (m != f) + { + fprintf(stderr, "PNG_ROW_FROM_PASS_ROW(%u, %d) = %u != %x\n", + v, pass, m, f); + exit(99); + } } - m = PNG_COL_FROM_PASS_COL(v, pass); - f = png_col_from_pass_col(v, pass); - if (m != f) + if (v < png_pass_cols(0xFFFFFFFFU, pass)) { - fprintf(stderr, "PNG_COL_FROM_PASS_COL(%u, %d) = %u != %x\n", - v, pass, m, f); - exit(99); + m = PNG_COL_FROM_PASS_COL(v, pass); + f = png_col_from_pass_col(v, pass); + if (m != f) + { + fprintf(stderr, "PNG_COL_FROM_PASS_COL(%u, %d) = %u != %x\n", + v, pass, m, f); + exit(99); + } } m = PNG_ROW_IN_INTERLACE_PASS(v, pass);