summaryrefslogtreecommitdiffstats
path: root/Modules/zlibmodule.c
diff options
context:
space:
mode:
authorNadeem Vawda <nadeem.vawda@gmail.com>2011-08-28 09:26:46 (GMT)
committerNadeem Vawda <nadeem.vawda@gmail.com>2011-08-28 09:26:46 (GMT)
commit524148ad7a3e5420abf867b1e30017b5ca2311a4 (patch)
treea1641b086435868bbfcafba4232c85cf5111364b /Modules/zlibmodule.c
parentd54fa555cba8bb6d26469a5cc283c468a03f0db8 (diff)
downloadcpython-524148ad7a3e5420abf867b1e30017b5ca2311a4.zip
cpython-524148ad7a3e5420abf867b1e30017b5ca2311a4.tar.gz
cpython-524148ad7a3e5420abf867b1e30017b5ca2311a4.tar.bz2
Issue #12839: Fix crash in zlib module due to version mismatch.
If the version of zlib used to compile the zlib module is incompatible with the one that is actually linked in, then calls into zlib will fail. This can leave attributes of the z_stream uninitialized, so we must take care to avoid segfaulting by trying to use an invalid pointer. Fix by Richard M. Tew.
Diffstat (limited to 'Modules/zlibmodule.c')
-rw-r--r--Modules/zlibmodule.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index ba0e59c..a1e605b 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -52,7 +52,13 @@ typedef struct
static void
zlib_error(z_stream zst, int err, char *msg)
{
- const char *zmsg = zst.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: