From d92383102740bd143c5221a519433e64c4c9c498 Mon Sep 17 00:00:00 2001 From: "Andrew M. Kuchling" Date: Mon, 9 Oct 2000 14:18:10 +0000 Subject: [PATCH] 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. --- Modules/zlibmodule.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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) { -- 2.50.1