Merge branch 'PHP-5.5' into PHP-5.6

* PHP-5.5:
  Fixed bug #65593 (Segfault when calling ob_start from output buffering callback)
This commit is contained in:
Michael Wallner 2015-02-18 13:59:32 +01:00
commit 0d2a2b98c9
2 changed files with 25 additions and 11 deletions

View File

@ -172,21 +172,22 @@ PHPAPI void php_output_deactivate(TSRMLS_D)
{
php_output_handler **handler = NULL;
php_output_header(TSRMLS_C);
if ((OG(flags) & PHP_OUTPUT_ACTIVATED)) {
php_output_header(TSRMLS_C);
OG(flags) ^= PHP_OUTPUT_ACTIVATED;
OG(active) = NULL;
OG(running) = NULL;
OG(flags) ^= PHP_OUTPUT_ACTIVATED;
OG(active) = NULL;
OG(running) = NULL;
/* release all output handlers */
if (OG(handlers).elements) {
while (SUCCESS == zend_stack_top(&OG(handlers), (void *) &handler)) {
php_output_handler_free(handler TSRMLS_CC);
zend_stack_del_top(&OG(handlers));
/* release all output handlers */
if (OG(handlers).elements) {
while (SUCCESS == zend_stack_top(&OG(handlers), (void *) &handler)) {
php_output_handler_free(handler TSRMLS_CC);
zend_stack_del_top(&OG(handlers));
}
zend_stack_destroy(&OG(handlers));
}
zend_stack_destroy(&OG(handlers));
}
}
/* }}} */

View File

@ -0,0 +1,13 @@
--TEST--
Bug #65593 (ob_start(function(){ob_start();});)
--FILE--
<?php
echo "Test\n";
ob_start(function(){ob_start();});
?>
===DONE===
--EXPECT--
Test
Fatal error: Cannot destroy active lambda function in /home/mike/src/php-5.5/tests/output/bug65593.php on line 4