From 524148ad7a3e5420abf867b1e30017b5ca2311a4 Mon Sep 17 00:00:00 2001 From: Nadeem Vawda Date: Sun, 28 Aug 2011 11:26:46 +0200 Subject: [PATCH] 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. --- Misc/ACKS | 1 + Misc/NEWS | 3 +++ Modules/zlibmodule.c | 8 +++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Misc/ACKS b/Misc/ACKS index 6f7d9d12511d..7096d728d284 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -874,6 +874,7 @@ Monty Taylor Amy Taylor Anatoly Techtonik Mikhail Terekhov +Richard M. Tew Tobias Thelen James Thomas Robin Thomas diff --git a/Misc/NEWS b/Misc/NEWS index f6fe5b7014f7..23b336bb52bb 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -22,6 +22,9 @@ Core and Builtins Library ------- +- Issue #12839: Fix crash in zlib module due to version mismatch. + Fix by Richard M. Tew. + - Issue #11657: Fix sending file descriptors over 255 over a multiprocessing Pipe. diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index ba0e59ce0641..a1e605b3d2be 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: -- 2.47.3