diff Modules/zlibmodule.c @ 61524:4b10ef8a024c 3.1

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. ........ ................
author Antoine Pitrou <solipsis@pitrou.net>
date Tue, 11 May 2010 23:49:58 +0000
parents f197407bdba2
children f8a77fd675f5 4549426ee4d6
line wrap: on
line diff
--- a/Modules/zlibmodule.c	Tue May 11 23:38:15 2010 +0000
+++ b/Modules/zlibmodule.c	Tue May 11 23:49:58 2010 +0000
@@ -52,10 +52,24 @@
 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 @@
              * 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;
             }