From 4356932dfe142bcd4f8ede540c8a7415b175445d Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Mon, 30 Sep 2002 10:18:06 +0000 Subject: [PATCH] Fix infinite recursion bug when using zlib output compression. Cause: the chunk size is taken from the zlib.output_compression setting, which is 0 or 1. This causes the block_size for output buffer to be set to 0 (1 / 2) and thus causes infinite recursion in php_ob_allocate(). Solution: use a value of 0 for the chunk size which will use the default sizes. Also add a sanity check which will default the block_size to 1 if it ends up as 0. --- ext/zlib/zlib.c | 2 ++ main/output.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index b6bf9e90ffc..ffec5e84373 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -230,6 +230,8 @@ PHP_RINIT_FUNCTION(zlib) ZLIBG(ob_gzhandler_status) = 0; ZLIBG(ob_gzip_coding) = 0; if (chunk_size) { + if (chunk_size == 1) + chunk_size = 0; /* use the default size */ php_enable_output_compression(chunk_size TSRMLS_CC); } return SUCCESS; diff --git a/main/output.c b/main/output.c index c55286e3857..17a6491063a 100644 --- a/main/output.c +++ b/main/output.c @@ -132,6 +132,8 @@ PHPAPI int php_start_ob_buffer(zval *output_handler, uint chunk_size, zend_bool if (chunk_size) { initial_size = (chunk_size*3/2); block_size = chunk_size/2; + if (block_size == 0) + block_size = 1; } else { initial_size = 40*1024; block_size = 10*1024;