]> granicus.if.org Git - php/commitdiff
- Fixed zlib.deflate compress filter to actually accpet level parameter.
authorJani Taskinen <jani@php.net>
Mon, 31 Aug 2009 21:18:55 +0000 (21:18 +0000)
committerJani Taskinen <jani@php.net>
Mon, 31 Aug 2009 21:18:55 +0000 (21:18 +0000)
ext/zlib/tests/zlib_filter_deflate2.phpt [new file with mode: 0644]
ext/zlib/zlib_filter.c

diff --git a/ext/zlib/tests/zlib_filter_deflate2.phpt b/ext/zlib/tests/zlib_filter_deflate2.phpt
new file mode 100644 (file)
index 0000000..764a760
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+zlib.deflate (with level parameter set)
+--SKIPIF--
+<?php if (!extension_loaded("zlib")) print "skip"; ?>
+--FILE--
+<?php
+$text = 'I am the very model of a modern major general, I\'ve information vegetable, animal, and mineral.';
+
+$fp = fopen('php://stdout', 'w');
+stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, array('level' => 9));
+fwrite($fp, $text);
+fclose($fp);
+
+?> 
+--EXPECT-- 
+\1dËA\ e\80 \fDÑ«ÌÎ\8dñ\1e\1c£\86\ 11´M\1aBâíUv\7fñ_\82(ÆELÆ\ 3õÌ\ e/\90\95aP¹=Pi\fé;Ò6\89fÅCe4·\8fU\ e9;w\88\1f±\fm\v\1c
index 59fb96895e65b54502c6329bab7eccdc5c309aed..c6146380394601219cb0ddfcb353fd22240180b2 100644 (file)
@@ -370,7 +370,7 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
 
 
                if (filterparams) {
-                       zval **tmpzval;
+                       zval **tmpzval, tmp;
 
                        /* filterparams can either be a scalar value to indicate compression level (shortcut method)
                Or can be a hash containing one or more of 'window', 'memory', and/or 'level' members. */
@@ -379,8 +379,6 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
                                case IS_ARRAY:
                                case IS_OBJECT:
                                        if (zend_hash_find(HASH_OF(filterparams), "memory", sizeof("memory"), (void**) &tmpzval) == SUCCESS) {
-                                               zval tmp;
-               
                                                tmp = **tmpzval;
                                                zval_copy_ctor(&tmp);
                                                convert_to_long(&tmp);
@@ -394,8 +392,6 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
                                        }
 
                                        if (zend_hash_find(HASH_OF(filterparams), "window", sizeof("window"), (void**) &tmpzval) == SUCCESS) {
-                                               zval tmp;
-               
                                                tmp = **tmpzval;
                                                zval_copy_ctor(&tmp);
                                                convert_to_long(&tmp);
@@ -409,6 +405,8 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
                                        }
 
                                        if (zend_hash_find(HASH_OF(filterparams), "level", sizeof("level"), (void**) &tmpzval) == SUCCESS) {
+                                               tmp = **tmpzval;
+
                                                /* Psuedo pass through to catch level validating code */
                                                goto factory_setlevel;
                                        }
@@ -416,19 +414,16 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f
                                case IS_STRING:
                                case IS_DOUBLE:
                                case IS_LONG:
-                                       {
-                                               zval tmp;
-               
-                                               tmp = *filterparams;
-                                               zval_copy_ctor(&tmp);
-                                               convert_to_long(&tmp);
+                                       tmp = *filterparams;
 factory_setlevel:
-                                               /* Set compression level within reason (-1 == default, 0 == none, 1-9 == least to most compression */
-                                               if (Z_LVAL(tmp) < -1 || Z_LVAL(tmp) > 9) {
-                                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid compression level specified. (%ld)", Z_LVAL(tmp));
-                                               } else {
-                                                       level = Z_LVAL(tmp);
-                                               }
+                                       zval_copy_ctor(&tmp);
+                                       convert_to_long(&tmp);
+
+                                       /* Set compression level within reason (-1 == default, 0 == none, 1-9 == least to most compression */
+                                       if (Z_LVAL(tmp) < -1 || Z_LVAL(tmp) > 9) {
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid compression level specified. (%ld)", Z_LVAL(tmp));
+                                       } else {
+                                               level = Z_LVAL(tmp);
                                        }
                                        break;
                                default: