From: Michael Wallner Date: Mon, 5 Mar 2012 15:35:22 +0000 (+0000) Subject: fix bug #61287 (A particular string fails to decompress) X-Git-Tag: php-5.5.0alpha1~467 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e63e6647ff84852046cb12f2111fe9bda7eff244;p=php fix bug #61287 (A particular string fails to decompress) --- diff --git a/ext/zlib/php_zlib.h b/ext/zlib/php_zlib.h index c265151abf..3d8c90cbf5 100644 --- a/ext/zlib/php_zlib.h +++ b/ext/zlib/php_zlib.h @@ -65,6 +65,7 @@ extern zend_module_entry php_zlib_module_entry; #define phpext_zlib_ptr zlib_module_ptr #ifdef ZTS +# include "TSRM.h" # define ZLIBG(v) TSRMG(zlib_globals_id, zend_zlib_globals *, v) #else # define ZLIBG(v) (zlib_globals.v) diff --git a/ext/zlib/tests/bug61287.phpt b/ext/zlib/tests/bug61287.phpt new file mode 100644 index 0000000000..769446a8cd --- /dev/null +++ b/ext/zlib/tests/bug61287.phpt @@ -0,0 +1,24 @@ +--TEST-- +bug #61287 - inflate needs the terminating null byte +--SKIPIF-- + 1, + 'discipline' => 23, + 'degrees' => array(), + 'country_id' => 27 +); + +$serialized = serialize($array); + +$deflated = gzdeflate($serialized, 9); +$inflated = gzinflate($deflated); + +echo strlen($inflated),"\n"; +?> +Done +--EXPECT-- +92 +Done diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index 772d8d9c7a..f79dccce51 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -400,7 +400,7 @@ retry_raw_inflate: status = inflateInit2(&Z, encoding); if (Z_OK == status) { Z.next_in = (Bytef *) in_buf; - Z.avail_in = in_len; + Z.avail_in = in_len + 1; /* NOTE: data must be zero terminated */ switch (status = php_zlib_inflate_rounds(&Z, max_len, out_buf, out_len)) { case Z_STREAM_END: