1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

output: Fail starting to output buffer when the output layer is deactivated (#20846)

Fixes php/php-src#20837.
This commit is contained in:
Tim Düsterhus
2026-01-10 14:37:52 +01:00
committed by GitHub
parent 60b1f59081
commit b5d6377ada
4 changed files with 34 additions and 0 deletions

4
NEWS
View File

@@ -2,6 +2,10 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 8.4.18
- Core:
. Fixed bug GH-20837 (NULL dereference when calling ob_start() in shutdown
function triggered by bailout in php_output_lock_error()). (timwolla)
- MbString:
. Fixed bug GH-20833 (mb_str_pad() divide by zero if padding string is
invalid in the encoding). (ndossche)

View File

@@ -538,6 +538,10 @@ PHPAPI zend_result php_output_handler_start(php_output_handler *handler)
HashTable *rconflicts;
php_output_handler_conflict_check_t conflict;
if (!(OG(flags) & PHP_OUTPUT_ACTIVATED)) {
return FAILURE;
}
if (php_output_lock_error(PHP_OUTPUT_HANDLER_START) || !handler) {
return FAILURE;
}

View File

@@ -21,4 +21,7 @@ ob_start(new Test, 1);
echo "trigger bug";
?>
--EXPECTF--
%r(Notice: ob_start\(\): Failed to create buffer in [^\r\n]+ on line \d+\r?\n(\r?\n)?)+%r
Notice: ob_start(): Failed to create buffer in %s on line %d
Fatal error: ob_start(): Cannot use output buffering in output buffering display handlers in %s on line %d

23
tests/output/gh20837.phpt Normal file
View File

@@ -0,0 +1,23 @@
--TEST--
ob_start(): NULL dereference when calling ob_start() in shutdown function triggered by bailout in php_output_lock_error()
--FILE--
<?php
register_shutdown_function(function () {
ob_start(function ($input) {
echo "bar";
return strtoupper($input);
});
});
ob_start(function () {
ob_start();
}, 1);
echo "foo";
?>
--EXPECTF--
Fatal error: ob_start(): Cannot use output buffering in output buffering display handlers in %s on line %d
Notice: ob_start(): Failed to create buffer in %s on line %d