com php-src: fix bug #60761 zlib.output_compression fails on refresh: ext/zlib/zlib.c main/output.c main /php_output.h
| From: | Michael Wallner | Date: | Tue, 15 May 2012 07:33:47 +0000 |
| Subject: | com php-src: fix bug #60761 zlib.output_compression fails on refresh: ext/zlib/zlib.c main/output.c main /php_output.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-69068@lists.php.net to get a copy of this message | ||
Commit: 0ad53bfd7da12a92a46c08e3fff579a15026b88b
Author: Michael Wallner <mike@php.net> Tue, 15 May 2012 09:33:07 +0200
Parents: d9788dd73f93bc492d8fd6e93051e2a5bc8bec9f
Branches: PHP-5.4 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=0ad53bfd7da12a92a46c08e3fff579a15026b88b
Log:
fix bug #60761 zlib.output_compression fails on refresh
Bugs:
https://bugs.php.net/60761
Changed paths:
M ext/zlib/zlib.c
M main/output.c
M main/php_output..h
Diff:
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index f157821..c6e2e0c 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -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;
diff --git a/main/output.c b/main/output.c
index 138339e..d4eaa67 100644
--- a/main/output.c
+++ b/main/output.c
@@ -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;
}
diff --git a/main/php_output.h b/main/php_output.h
index e4ab0f9..d050a14 100644
--- a/main/php_output.h
+++ b/main/php_output.h
@@ -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 \
)