From: Wez Furlong Date: Mon, 30 Sep 2002 10:18:06 +0000 (+0000) Subject: Fix infinite recursion bug when using zlib output compression. X-Git-Tag: MODERN_SYMMETRIC_SESSION_BEHAVIOUR_20021003~53 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4356932dfe142bcd4f8ede540c8a7415b175445d;p=php 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. --- diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index b6bf9e90ff..ffec5e8437 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 c55286e385..17a6491063 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;