]> granicus.if.org Git - php/commitdiff
fix bug #65391
authorMichael Wallner <mike@php.net>
Fri, 9 Aug 2013 09:14:04 +0000 (11:14 +0200)
committerMichael Wallner <mike@php.net>
Fri, 9 Aug 2013 09:14:04 +0000 (11:14 +0200)
Unable to send vary header user-agent when
ob_start('ob_gzhandler') is called

NEWS
ext/zlib/tests/bug65391.phpt [new file with mode: 0644]
ext/zlib/zlib.c

diff --git a/NEWS b/NEWS
index 1b91fc7b3c17769d9719518edd7258dc9daf1c95..76ec38e565c39755297c59dfff783f52aa38fbed 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -36,6 +36,10 @@ PHP                                                                        NEWS
   . Fixed bug #62978 (Disallow possible SQL injections with pg_select()/pg_update()
     /pg_delete()/pg_insert()). (Yasuo)
 
+- Zlib:
+  . Fixed bug #65391 (Unable to send vary header user-agent when 
+    ob_start('ob_gzhandler') is called) (Mike)
+
 ?? ??? 2013, PHP 5.4.18
 
 - Core:
diff --git a/ext/zlib/tests/bug65391.phpt b/ext/zlib/tests/bug65391.phpt
new file mode 100644 (file)
index 0000000..3ba5350
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Bug #65391 (Unable to send vary header user-agent when ob_start('ob_gzhandler') is called)
+--SKIPIF--
+<?php
+extension_loaded("zlib") or die("skip need zlib");
+?>
+--GET--
+dummy=1
+--FILE--
+<?php
+header("Vary: Cookie");
+ob_start("ob_gzhandler");
+
+// run-tests cannot test for a multiple Vary header
+ob_flush();
+print_r(headers_list());
+
+?>
+Done
+--EXPECTF--
+Array
+(
+    [0] => X-Powered-By: PHP/%s
+    [1] => Vary: Cookie
+    [2] => Vary: Accept-Encoding
+)
+Done
+
index 1a202e344ed436522fa2c47a0dd6fcbdf16dc1b3..1114bc8a65bc4639c3d136c5753821eea02eb26f 100644 (file)
@@ -190,7 +190,7 @@ static int php_zlib_output_handler(void **handler_context, php_output_context *o
                if ((output_context->op & PHP_OUTPUT_HANDLER_START)
                &&      (output_context->op != (PHP_OUTPUT_HANDLER_START|PHP_OUTPUT_HANDLER_CLEAN|PHP_OUTPUT_HANDLER_FINAL))
                ) {
-                       sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 1 TSRMLS_CC);
+                       sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 0 TSRMLS_CC);
                }
                return FAILURE;
        }
@@ -220,7 +220,7 @@ static int php_zlib_output_handler(void **handler_context, php_output_context *o
                                                deflateEnd(&ctx->Z);
                                                return FAILURE;
                                }
-                               sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 1 TSRMLS_CC);
+                               sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 0 TSRMLS_CC);
                                php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE, NULL TSRMLS_CC);
                        }
                }
@@ -478,7 +478,7 @@ static PHP_FUNCTION(ob_gzhandler)
                                sapi_add_header_ex(ZEND_STRL("Content-Encoding: deflate"), 1, 1 TSRMLS_CC);
                                break;
                }
-               sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 1 TSRMLS_CC);
+               sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 0 TSRMLS_CC);
        }
 
        if (!ZLIBG(ob_gzhandler)) {