Skip to content
Snippets Groups Projects
Commit 9ecabdb4 authored by Thomas Kluyver's avatar Thomas Kluyver
Browse files

Better error messages

parent 281ed3f6
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#define DEF_MEM_LEVEL 8 #define DEF_MEM_LEVEL 8
// malloc & free copied from CPython // malloc & free functions copied from CPython
static void* static void*
PyZlib_Malloc(voidpf ctx, uInt items, uInt size) PyZlib_Malloc(voidpf ctx, uInt items, uInt size)
{ {
...@@ -28,6 +28,36 @@ PyZlib_Free(voidpf ctx, void *ptr) ...@@ -28,6 +28,36 @@ PyZlib_Free(voidpf ctx, void *ptr)
free(ptr); free(ptr);
} }
// zlib_error copied from CPython
static void
zlib_error(z_stream zst, int err, const char *msg)
{
const char *zmsg = Z_NULL;
/* In case of a version mismatch, zst.msg won't be initialized.
Check for this case first, before looking at zst.msg. */
if (err == Z_VERSION_ERROR)
zmsg = "library version mismatch";
if (zmsg == Z_NULL)
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(PyExc_RuntimeError, "Error %d %s", err, msg);
else
PyErr_Format(PyExc_RuntimeError, "Error %d %s: %.200s", err, msg, zmsg);
}
static PyObject * static PyObject *
compress_into(PyObject *module, PyObject *args) { compress_into(PyObject *module, PyObject *args) {
PyObject *return_value = NULL; PyObject *return_value = NULL;
...@@ -67,8 +97,7 @@ compress_into(PyObject *module, PyObject *args) { ...@@ -67,8 +97,7 @@ compress_into(PyObject *module, PyObject *args) {
goto done; goto done;
default: default:
deflateEnd(&zst); deflateEnd(&zst);
PyErr_SetString(PyExc_RuntimeError, "Other error"); zlib_error(zst, err, "while compressing data");
//zlib_error(state, zst, err, "while compressing data");
goto done; goto done;
} }
...@@ -86,7 +115,7 @@ compress_into(PyObject *module, PyObject *args) { ...@@ -86,7 +115,7 @@ compress_into(PyObject *module, PyObject *args) {
goto done; goto done;
default: default:
deflateEnd(&zst); deflateEnd(&zst);
PyErr_SetString(PyExc_RuntimeError, "Other error"); zlib_error(zst, err, "while compressing data");
goto done; goto done;
} }
bytes_written = output.len - zst.avail_out; bytes_written = output.len - zst.avail_out;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment