diff --git a/main/main.c b/main/main.c index ee7d1cca69b5..03b9f2dafd3a 100644 --- a/main/main.c +++ b/main/main.c @@ -1922,6 +1922,9 @@ zend_result php_request_startup(void) /* PG(during_request_startup) = 0; */ php_hash_environment(); + if (ZEND_HAS_OOM()) { + zend_handle_delayed_oom(); + } zend_activate_modules(); PG(modules_activated)=1; } zend_catch { diff --git a/tests/basic/gh24787_delayed_oom_request_startup.phpt b/tests/basic/gh24787_delayed_oom_request_startup.phpt new file mode 100644 index 000000000000..723bd5135b3b --- /dev/null +++ b/tests/basic/gh24787_delayed_oom_request_startup.phpt @@ -0,0 +1,38 @@ +--TEST-- +GH-24787 (Delayed OOM during request startup is handled as a fatal error) +--SKIPIF-- + +--FILE-- + 'GET', 'HTTP_COOKIE' => implode('; ', $cookies), 'SCRIPT_FILENAME' => $script, 'REDIRECT_STATUS' => '1'] +); +$output = stream_get_contents($pipes[1]) . stream_get_contents($pipes[2]); +fclose($pipes[1]); +fclose($pipes[2]); +proc_close($process); +unlink($script); + +echo str_contains($output, 'Allowed memory size') ? "OOM handled\n" : $output; +?> +--EXPECT-- +OOM handled