-
Notifications
You must be signed in to change notification settings - Fork 7.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Transfer closed for httpd parent and subrequest double bailout #17509
Comments
The case above is quite simple one and easily fixable. Unfortunately there are more complex scenarios that make things much worse. Specifically problem reported in https://bugs.php.net/bug.php?id=80558 . Just to simplify it, has a library file: <?php
// library.php
function foo() {} Then there is error.php, which is set in ErrorDocument (e.g. <?php
// error.php
error_reporting(E_ALL);
require_once 'library.php';
echo 'I will deal with a 500 error and show a pretty error message'; And finally test.php <?php
// test.php
error_reporting(E_ALL);
require_once 'library.php';
header('Foo : Bar');
flush(); // Only change
echo 'I fell to pieces in a horrendous and nonsensical way'; What happens here that the invalid header is flushed which gets to But even if the error.php runs fine (e.g. commenting out the library require), then it just result in bunch of memleaks and some incorrect handling as well. It's all just a proper mess of re-using and cleaning the same state. Ideally we should somehow store all persistent globals in the subrequest and then restore them at the end. Seems like quite a big job though. Alternatively we could try to propagate termination to parent so it doesn't clear what has been cleared. Not a small job either but probably more likely for a bug fix. |
Description
This can be recreated by setting memory_limit to 128MB and hitting virtual.php script that calls subrequest.php script
The following code:
Resulted in this curl result:
The error logs showed following:
But I expected normal output with 2 errors for allowed memory size
I tested this with 8.1 but it will be the same for supported version I'm sure - will double check later.
PHP Version
PHP 8.1+
Operating System
Ubuntu 20.04
The text was updated successfully, but these errors were encountered: