]> granicus.if.org Git - php/commitdiff
fix bug #61287 (A particular string fails to decompress)
authorMichael Wallner <mike@php.net>
Mon, 5 Mar 2012 15:35:22 +0000 (15:35 +0000)
committerMichael Wallner <mike@php.net>
Mon, 5 Mar 2012 15:35:22 +0000 (15:35 +0000)
ext/zlib/php_zlib.h
ext/zlib/tests/bug61287.phpt [new file with mode: 0644]
ext/zlib/zlib.c

index c265151abfbd0ddbae6891871ae59c68e687943c..3d8c90cbf5034bff3cbbe95dcb9e054d7f835540 100644 (file)
@@ -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 (file)
index 0000000..769446a
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+bug #61287 - inflate needs the terminating null byte
+--SKIPIF--
+<?php extension_loaded("zlib") or die("SKIP need zlib");
+--FILE--
+<?php
+$array = array(
+    'region_id' => 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
index 772d8d9c7ad1aae6a821cef721e6feb5c3127873..f79dccce51f4c5a1131a2fb7d108d842df3bc664 100644 (file)
@@ -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: