aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2016-11-24 03:41:17 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-11-24 03:41:18 +0000
commit03e96d17ed6ae930d6bcf22f73af0298b22f5f5e (patch)
tree279665cc5cf5ea9960d2b45981e62ed52146a581
parent51e126759e208d6e85eaddac482fda10b652e728 (diff)
parent991be70ee26a9a3933ae99cea52a51f1ef455dd5 (diff)
downloadlibpng-03e96d17ed6ae930d6bcf22f73af0298b22f5f5e.tar.gz
Merge "Revert "[libpng16] Revert ADLER32 error handling in pngrutil.c and pngpread.c.""
-rw-r--r--README.android4
-rw-r--r--pngpread.c7
-rw-r--r--pngrutil.c10
3 files changed, 15 insertions, 6 deletions
diff --git a/README.android b/README.android
index 32fb665f9..f6062c609 100644
--- a/README.android
+++ b/README.android
@@ -21,7 +21,3 @@ be listed here:
in contrib/intel/intel_sse.patch.
The patch was applied using the following command:
'patch -i contrib/intel/intel_sse.patch -p1'
-
-(5) Revert ADLER32 error handling to fix the infinite loop
-Cherry picked from upstream:
-https://github.com/glennrp/libpng/commit/d65a92b951079d315e17e20ba9e7b8423d19397e
diff --git a/pngpread.c b/pngpread.c
index 794352f42..650ba1e23 100644
--- a/pngpread.c
+++ b/pngpread.c
@@ -684,7 +684,12 @@ png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
png_warning(png_ptr, "Truncated compressed data in IDAT");
else
- png_error(png_ptr, "Decompression error in IDAT");
+ {
+ if (ret == Z_DATA_ERROR)
+ png_benign_error(png_ptr, "IDAT: ADLER32 checksum mismatch");
+ else
+ png_error(png_ptr, "Decompression error in IDAT");
+ }
/* Skip the check on unprocessed input */
return;
diff --git a/pngrutil.c b/pngrutil.c
index 3eaa635ad..ed09ddd13 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -4101,7 +4101,15 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
png_zstream_error(png_ptr, ret);
if (output != NULL)
- png_chunk_error(png_ptr, png_ptr->zstream.msg);
+ {
+ if(!strncmp(png_ptr->zstream.msg,"incorrect data check",20))
+ {
+ png_chunk_benign_error(png_ptr, "ADLER32 checksum mismatch");
+ continue;
+ }
+ else
+ png_chunk_error(png_ptr, png_ptr->zstream.msg);
+ }
else /* checking */
{