]> granicus.if.org Git - php/commitdiff
fix bug #60761 zlib.output_compression fails on refresh
authorMichael Wallner <mike@php.net>
Tue, 15 May 2012 07:33:07 +0000 (09:33 +0200)
committerMichael Wallner <mike@php.net>
Tue, 15 May 2012 07:33:47 +0000 (09:33 +0200)
ext/zlib/zlib.c
main/output.c
main/php_output.h

index f157821bf58875c3039cfc7f48741f6a86bb0937..c6e2e0cf8bf869dec488025bb9c72248f8a602c9 100644 (file)
@@ -284,7 +284,8 @@ static void php_zlib_output_compression_start(TSRMLS_D)
                        ZLIBG(output_compression) = PHP_OUTPUT_HANDLER_DEFAULT_SIZE;
                        /* break omitted intentionally */
                default:
-                       if (    (h = php_zlib_output_handler_init(ZEND_STRL(PHP_ZLIB_OUTPUT_HANDLER_NAME), ZLIBG(output_compression), PHP_OUTPUT_HANDLER_STDFLAGS TSRMLS_CC)) &&
+                       if (    php_zlib_output_encoding(TSRMLS_C) &&
+                                       (h = php_zlib_output_handler_init(ZEND_STRL(PHP_ZLIB_OUTPUT_HANDLER_NAME), ZLIBG(output_compression), PHP_OUTPUT_HANDLER_STDFLAGS TSRMLS_CC)) &&
                                        (SUCCESS == php_output_handler_start(h TSRMLS_CC))) {
                                if (ZLIBG(output_handler) && *ZLIBG(output_handler)) {
                                        MAKE_STD_ZVAL(zoh);
@@ -966,7 +967,6 @@ static PHP_RINIT_FUNCTION(zlib)
 
 static PHP_RSHUTDOWN_FUNCTION(zlib)
 {
-       ZLIBG(output_compression) = 0;
        php_zlib_cleanup_ob_gzhandler_mess(TSRMLS_C);
 
     return SUCCESS;
index 138339ea965eabec38448b7cb27382153afd7cfa..d4eaa6701dbcddf565aaf44ec478fa1d9418e764 100644 (file)
@@ -1025,6 +1025,7 @@ static inline php_output_handler_status_t php_output_handler_op(php_output_handl
                case PHP_OUTPUT_HANDLER_SUCCESS:
                        /* no more buffered data */
                        handler->buffer.used = 0;
+                       handler->flags |= PHP_OUTPUT_HANDLER_PROCESSED;
                        break;
        }
 
index e4ab0f920af990c5e02c97ebd9283110c2d15697..d050a141a1881a408979615f31e6fbcdf966f39e 100644 (file)
@@ -45,6 +45,7 @@
 /* handler status flags */
 #define PHP_OUTPUT_HANDLER_STARTED             0x1000
 #define PHP_OUTPUT_HANDLER_DISABLED            0x2000
+#define PHP_OUTPUT_HANDLER_PROCESSED   0x4000
 
 /* handler op return values */
 typedef enum _php_output_handler_status_t {
@@ -82,7 +83,7 @@ typedef enum _php_output_handler_hook_t {
 } php_output_handler_hook_t;
 
 #define PHP_OUTPUT_HANDLER_INITBUF_SIZE(s) \
-( (s) ? \
+( ((s) > 1) ? \
        (s) + PHP_OUTPUT_HANDLER_ALIGNTO_SIZE - ((s) % (PHP_OUTPUT_HANDLER_ALIGNTO_SIZE)) : \
        PHP_OUTPUT_HANDLER_DEFAULT_SIZE \
 )