]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #45392 (ob_start()/ob_end_clean() and memory_limit).
authorArnaud Le Blanc <lbarnaud@php.net>
Mon, 18 Aug 2008 04:08:17 +0000 (04:08 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Mon, 18 Aug 2008 04:08:17 +0000 (04:08 +0000)
main/output.c
tests/lang/bug45392.phpt [new file with mode: 0644]

index 6f3b4e3c5acfd37a3f4cdd05c93d555462ee70c1..59c6c8bdaf865d246a1885666688b4da0d561111 100644 (file)
@@ -336,7 +336,13 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush TSRMLS
 PHPAPI void php_end_ob_buffers(zend_bool send_buffer TSRMLS_DC)
 {
        while (OG(ob_nesting_level)!=0) {
-               php_end_ob_buffer(send_buffer, 0 TSRMLS_CC);
+               /* in case of unclean_shutdown, do not output the buffer if it is not 
+                * meant to be until end of script or ob_end_*() call */
+               if (CG(unclean_shutdown) && !OG(active_ob_buffer).chunk_size) {
+                       php_end_ob_buffer(0, 0 TSRMLS_CC);
+               } else {
+                       php_end_ob_buffer(send_buffer, 0 TSRMLS_CC);
+               }
        }
 }
 /* }}} */
diff --git a/tests/lang/bug45392.phpt b/tests/lang/bug45392.phpt
new file mode 100644 (file)
index 0000000..0962a9f
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+Bug #45392 (ob_start()/ob_end_clean() and memory_limit)
+--INI--
+display_errors=stderr
+--FILE--
+<?php
+echo __LINE__ . "\n";
+ini_set('memory_limit', 100);
+ob_start(NULL, 10);
+echo __LINE__ ."\n";
+ob_start();
+$i = 0;
+while($i++ < 5000)  {
+  echo str_repeat("may not be displayed ", 42);
+}
+ob_end_flush();
+ob_end_clean();
+?>
+--EXPECTF--
+2
+Fatal error: Allowed memory size of %d bytes exhausted%s
+5