From: Andrew M. Kuchling Date: Mon, 9 Oct 2000 14:18:10 +0000 (+0000) Subject: Patch #101810: check whether zst.avail_out is non-zero when getting X-Git-Tag: v2.0c1~38 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d92383102740bd143c5221a519433e64c4c9c498;p=python 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 9416528ad4..cb2a2e5c97 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -214,7 +214,21 @@ PyZlib_decompress(PyObject *self, PyObject *args) 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) {