diff options
| author | Antoine Pitrou <solipsis@pitrou.net> | 2010-05-11 23:42:28 (GMT) |
|---|---|---|
| committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-05-11 23:42:28 (GMT) |
| commit | fc3bfad2e0376ea5aa8a0c5352aafd3d731aaad7 (patch) | |
| tree | e441f98008f8bcead20dddeaf5ed546fbc8d8475 /Modules/zlibmodule.c | |
| parent | 37ffc3e3ba18d0e54ea6f79e9c8aad94f0b41a7d (diff) | |
| download | cpython-fc3bfad2e0376ea5aa8a0c5352aafd3d731aaad7.zip cpython-fc3bfad2e0376ea5aa8a0c5352aafd3d731aaad7.tar.gz cpython-fc3bfad2e0376ea5aa8a0c5352aafd3d731aaad7.tar.bz2 | |
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.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index bb52fdc..183f01e 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -72,10 +72,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__, @@ -248,8 +262,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; } |
