summaryrefslogtreecommitdiffstats
path: root/Modules/zlibmodule.c
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-05-11 23:49:58 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-05-11 23:49:58 (GMT)
commit96f212b3777c113a326bfbbba93c453fbd5e0693 (patch)
treeae99bc618116c0b7be7c96268ddcea3761652ed5 /Modules/zlibmodule.c
parentbbff8cf035c2ca490efe7135b004cfbf8340b767 (diff)
downloadcpython-96f212b3777c113a326bfbbba93c453fbd5e0693.zip
cpython-96f212b3777c113a326bfbbba93c453fbd5e0693.tar.gz
cpython-96f212b3777c113a326bfbbba93c453fbd5e0693.tar.bz2
Merged revisions 81100 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r81100 | antoine.pitrou | 2010-05-12 01:46:02 +0200 (mer., 12 mai 2010) | 10 lines Merged revisions 81098 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r81098 | antoine.pitrou | 2010-05-12 01:42:28 +0200 (mer., 12 mai 2010) | 5 lines Issue #8681: Make the zlib module's error messages more informative when the zlib itself doesn't give any detailed explanation. ........ ................
Diffstat (limited to 'Modules/zlibmodule.c')
-rw-r--r--Modules/zlibmodule.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 1f263ab..54ab9a1 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -52,10 +52,24 @@ typedef struct
static void
zlib_error(z_stream zst, int err, char *msg)
{
- if (zst.msg == Z_NULL)
+ const char *zmsg = zst.msg;
+ if (zmsg == Z_NULL) {
+ switch (err) {
+ case Z_BUF_ERROR:
+ zmsg = "incomplete or truncated stream";
+ break;
+ case Z_STREAM_ERROR:
+ zmsg = "inconsistent stream state";
+ break;
+ case Z_DATA_ERROR:
+ zmsg = "invalid input data";
+ break;
+ }
+ }
+ if (zmsg == Z_NULL)
PyErr_Format(ZlibError, "Error %d %s", err, msg);
else
- PyErr_Format(ZlibError, "Error %d %s: %.200s", err, msg, zst.msg);
+ PyErr_Format(ZlibError, "Error %d %s: %.200s", err, msg, zmsg);
}
PyDoc_STRVAR(compressobj__doc__,
@@ -241,8 +255,7 @@ PyZlib_decompress(PyObject *self, PyObject *args)
* 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);
+ zlib_error(zst, err, "while decompressing data");
inflateEnd(&zst);
goto error;
}