]> granicus.if.org Git - php/commitdiff
fix Bug #43793: zlib filter is unable to auto-detect gzip/zlib file headers
authorGreg Beaver <cellog@php.net>
Wed, 9 Jan 2008 06:45:15 +0000 (06:45 +0000)
committerGreg Beaver <cellog@php.net>
Wed, 9 Jan 2008 06:45:15 +0000 (06:45 +0000)
NEWS
ext/zlib/tests/zlib_filter_inflate2.phpt [new file with mode: 0644]
ext/zlib/zlib_filter.c

diff --git a/NEWS b/NEWS
index 952d319b66deae979226aeaef907d6997b9e0af3..e84d02d403c51c51d191bdde3feeeae527fb2bdc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP                                                                        NEWS
 - Fixed a safe_mode bypass in cURL identified by Maksymilian Arciemowicz.
   (Ilia)
 
+- Fixed bug #43793 (zlib filter is unable to auto-detect gzip/zlib file headers).
+  (Greg)
 - Fixed bug #43663 (Extending PDO class with a __call() function doesn't work). 
   (David Soria Parra)
 - Fixed bug #43647 (Make FindFile use PATH_SEPARATOR instead of ";"). (Ilia)
diff --git a/ext/zlib/tests/zlib_filter_inflate2.phpt b/ext/zlib/tests/zlib_filter_inflate2.phpt
new file mode 100644 (file)
index 0000000..4332d8e
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+zlib.inflate of gzip-encoded stream
+--SKIPIF--
+<?php if (!extension_loaded("zlib")) print "skip"; ?>
+--FILE--
+<?php /* $Id$ */
+
+$a = gzopen(dirname(__FILE__) . '/test.txt.gz', 'w');
+fwrite($a, "This is quite the thing ain't it\n");
+fclose($a);
+
+$fp = fopen(dirname(__FILE__) . '/test.txt.gz', 'r');
+stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ);
+echo fread($fp, 2000);
+fclose($fp);
+echo "1\n";
+$fp = fopen(dirname(__FILE__) . '/test.txt.gz', 'r');
+// zlib format
+$fp = fopen(dirname(__FILE__) . '/test.txt.gz', 'r');
+stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ, array('window' => 15+16));
+echo "2\n";
+echo fread($fp, 2000);
+fclose($fp);
+// auto-detect
+$fp = fopen(dirname(__FILE__) . '/test.txt.gz', 'r');
+stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_READ, array('window' => 15+32));
+echo "3\n";
+echo fread($fp, 2000);
+fclose($fp);
+
+?>
+--CLEAN--
+<?php
+@unlink(dirname(__FILE__) . '/test.txt.gz');
+?>
+--EXPECT--
+1
+2
+This is quite the thing ain't it
+3
+This is quite the thing ain't it
\ No newline at end of file
index 6460607db9004216d7bc3ac3bbed170d23c59904..dc4432f70a4bf3e9903ec2ad536793658f9c50c3 100644 (file)
@@ -323,7 +323,7 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
                                /* log-2 base of history window (9 - 15) */
                                SEPARATE_ZVAL(tmpzval);
                                convert_to_long_ex(tmpzval);
-                               if (Z_LVAL_PP(tmpzval) < -MAX_WBITS || Z_LVAL_PP(tmpzval) > MAX_WBITS) {
+                               if (Z_LVAL_PP(tmpzval) < -MAX_WBITS || Z_LVAL_PP(tmpzval) > MAX_WBITS + 32) {
                                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter give for window size. (%ld)", Z_LVAL_PP(tmpzval));
                                } else {
                                        windowBits = Z_LVAL_PP(tmpzval);