Patch #101810: check whether zst.avail_out is non-zero when getting
a Z_BUF_ERROR while decompressing. If it is, assume that this means
the data being decompressed is bad and raise an exception, instead of
just assuming that Z_BUF_ERROR always means that more space is required.
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 9416528..cb2a2e5 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -214,7 +214,21 @@
case(Z_STREAM_END):
break;
case(Z_BUF_ERROR):
- case(Z_OK):
+ /*
+ * If there is at least 1 byte of room according to zst.avail_out
+ * and we get this error, assume that it means zlib cannot
+ * process the inflate call() due to an error in the data.
+ */
+ if (zst.avail_out > 0)
+ {
+ PyErr_Format(ZlibError, "Error %i while decompressing data",
+ err);
+ inflateEnd(&zst);
+ Py_DECREF(result_str);
+ return NULL;
+ }
+ /* fall through */
+ case(Z_OK):
/* need more memory */
if (_PyString_Resize(&result_str, r_strlen << 1) == -1)
{