From 443694d7ac595c38e3f2a47d11e7a21f8d1bf250 Mon Sep 17 00:00:00 2001 From: Glenn Randers-Pehrson Date: Sat, 23 Jan 2016 10:10:52 -0600 Subject: [PATCH] [libpng17] Revised workaround for Coverity issue in pngvalid.c --- ANNOUNCE | 5 +++-- CHANGES | 3 ++- contrib/libtests/pngvalid.c | 24 +++++++----------------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/ANNOUNCE b/ANNOUNCE index 74efab17c..2b3740073 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.7.0beta78 - January 19, 2016 +Libpng 1.7.0beta78 - January 22, 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. @@ -1214,7 +1214,7 @@ Version 1.7.0beta77 [January 16, 2016] than 1:1000. Attempted to work around a false-positive Coverity issue in pngvalid.c. -Version 1.7.0beta78 [January 19, 2016] +Version 1.7.0beta78 [January 22, 2016] Changed PNG_USE_MKSTEMP to __COVERITY__ to select alternate "tmpfile()" implementation in contrib/libtests/pngstest.c Fixed NO_STDIO build of pngunknown.c to skip calling png_init_io() @@ -1237,6 +1237,7 @@ Version 1.7.0beta78 [January 19, 2016] the ANSI-C90 defined type ptrdiff_t. The existing (1.6.22) checks for overflow are preserved but now accomodate images that require more than 32 bits of address space when size_t/ptrdiff_t are 64 bit types. + Revised workaround for false-positive Coverity issue in pngvalid.c. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/CHANGES b/CHANGES index 0c01afd9e..7f4a6d450 100644 --- a/CHANGES +++ b/CHANGES @@ -5513,7 +5513,7 @@ Version 1.7.0beta77 [January 16, 2016] than 1:1000. Attempted to work around a false-positive Coverity issue in pngvalid.c. -Version 1.7.0beta78 [January 19, 2016] +Version 1.7.0beta78 [January 22, 2016] Changed PNG_USE_MKSTEMP to __COVERITY__ to select alternate "tmpfile()" implementation in contrib/libtests/pngstest.c Fixed NO_STDIO build of pngunknown.c to skip calling png_init_io() @@ -5536,6 +5536,7 @@ Version 1.7.0beta78 [January 19, 2016] the ANSI-C90 defined type ptrdiff_t. The existing (1.6.22) checks for overflow are preserved but now accomodate images that require more than 32 bits of address space when size_t/ptrdiff_t are 64 bit types. + Revised workaround for false-positive Coverity issue in pngvalid.c. 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 9063b69fe..a32b21f2c 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.21 [(PENDING RELEASE)] + * Last changed in libpng 1.6.22 [(PENDING RELEASE)] * Copyright (c) 2014-2016 Glenn Randers-Pehrson * Written by John Cunningham Bowler * @@ -309,13 +309,8 @@ static void r16(png_uint_16p p16, size_t count) } } -#ifdef __COVERITY__ -# define R16(this)\ - r16(&(this), (sizeof (this))/2U/*(sizeof (png_uint_16))*/) -#else -# define R16(this)\ - r16(&(this), (sizeof (this))/(sizeof (png_uint_16))) -#endif +#define R16(this) r16(&(this), (sizeof (this))/(sizeof (png_uint_16))) +#define R16_1(this) r16(&(this), (size_t) 1U) #if defined PNG_READ_RGB_TO_GRAY_SUPPORTED ||\ defined PNG_READ_FILLER_SUPPORTED @@ -331,13 +326,8 @@ static void r32(png_uint_32p p32, size_t count) } } -#ifdef __COVERITY__ -# define R32(this)\ - r32(&(this), (sizeof (this))/4U/*(sizeof (png_uint_32))*/) -#else -# define R32(this)\ - r32(&(this), (sizeof (this))/(sizeof (png_uint_32))) -#endif +#define R32(this) r32(&(this), (sizeof (this))/(sizeof (png_uint_32))) +#define R32_1(this) r32(&(this), (size_t) 1U) #endif /* READ_FILLER || READ_RGB_TO_GRAY */ @@ -350,7 +340,7 @@ random_mod(unsigned int max) { png_uint_16 x; - R16(x); + R16_1(x); return x % max; /* 0 .. max-1 */ } @@ -7313,7 +7303,7 @@ image_transform_png_set_rgb_to_gray_ini(const image_transform *this, png_uint_32 ru; double total; - R32(ru); + R32_1(ru); data.green_coefficient = total = (ru & 0xffff) / 65535.; ru >>= 16; data.red_coefficient = (1 - total) * (ru & 0xffff) / 65535.;