From 5a1ce92c0ccf47b7c9ca37cf7f9a6cfa5c211762 Mon Sep 17 00:00:00 2001 From: John Bowler Date: Sun, 7 Apr 2013 21:37:52 -0500 Subject: [PATCH] [libpng16] Fixed incorrect warning of excess deflate data. End condition - the warning would be produced if the end of the deflate stream wasn't read in the last row. The warning is harmless. --- ANNOUNCE | 7 +++++-- CHANGES | 5 ++++- pngrutil.c | 15 +++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ANNOUNCE b/ANNOUNCE index 2dc99780a..7aaf171bc 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.7.0beta07 - April 1, 2013 +Libpng 1.7.0beta07 - April 8, 2013 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. @@ -236,8 +236,11 @@ Version 1.7.0beta06 [March 13, 2013] technically valid, although a reasonable treatment of division would show it to be incorrect. -Version 1.7.0beta07 [April 1, 2013] +Version 1.7.0beta07 [April 8, 2013] Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk handling. + Fixed incorrect warning of excess deflate data. End condition - the + warning would be produced if the end of the deflate stream wasn't read + in the last row. The warning is harmless. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/CHANGES b/CHANGES index 69e89fc45..6a68ac0ea 100644 --- a/CHANGES +++ b/CHANGES @@ -4523,8 +4523,11 @@ Version 1.7.0beta06 [March 13, 2013] technically valid, although a reasonable treatment of division would show it to be incorrect. -Version 1.7.0beta07 [April 1, 2013] +Version 1.7.0beta07 [April 8, 2013] Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk handling. + Fixed incorrect warning of excess deflate data. End condition - the + warning would be produced if the end of the deflate stream wasn't read + in the last row. The warning is harmless. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/pngrutil.c b/pngrutil.c index 7bbeef273..c74ea5512 100644 --- a/pngrutil.c +++ b/pngrutil.c @@ -3962,7 +3962,7 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output, png_ptr->zstream.avail_out = out; } - else /* check for end */ + else /* after last row, checking for end */ { png_ptr->zstream.next_out = tmpbuf; png_ptr->zstream.avail_out = (sizeof tmpbuf); @@ -3977,10 +3977,13 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output, */ ret = inflate(&png_ptr->zstream, Z_NO_FLUSH); - /* Take the unconsumed output back (so, in the 'check' case this just - * counts up). - */ - avail_out += png_ptr->zstream.avail_out; + /* Take the unconsumed output back. */ + if (output != NULL) + avail_out += png_ptr->zstream.avail_out; + + else /* avail_out counts the extra bytes */ + avail_out += (sizeof tmpbuf) - png_ptr->zstream.avail_out; + png_ptr->zstream.avail_out = 0; if (ret == Z_STREAM_END) @@ -4019,7 +4022,7 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output, if (output != NULL) png_error(png_ptr, "Not enough image data"); - else /* checking */ + else /* the deflate stream contained extra data */ png_chunk_benign_error(png_ptr, "Too much image data"); } }