Bug #78919 [Com]: CLI server does insufficient cleanup if php_request_startup() fails
| From: | cataphract@php.net | Date: | Sat, 07 Dec 2019 14:10:53 +0000 |
| Subject: | Bug #78919 [Com]: CLI server does insufficient cleanup if php_request_startup() fails | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-224114@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78919&edit=1
ID: 78919
Comment by: cataphract@php.net
Reported by: cataphract@php.net
Summary: CLI server does insufficient cleanup if
php_request_startup() fails
Status: Open
Type: Bug
Package: Built-in web server
Operating System: Irrelevant
PHP Version: 7.2.25
Block user comment: N
Private report: N
New Comment:
The Apache SAPI does call shutdown after a failed startup:
https://github.com/php/php-src/blob/5d6e923d46a89fe9cd8fb6c3a6da675aa67197b4/sapi/apache2handler/sapi_apache2.c#L710
and we haven't had any crashes reported from the errors raised during RINIT in our extension
(sqreen).
FPM simply exists if there's an error during RINIT but it can be worked around easily for our
purposes.
Previous Comments:
------------------------------------------------------------------------
[2019-12-07 13:10:47] cmb@php.net
Thanks! I wonder, though, whether it is generally safe to call
php_request_shutdown() after php_request_startup() has failed.
------------------------------------------------------------------------
[2019-12-06 14:43:49] contratempo at gmail dot com
The following patch has been added/updated:
Patch Name: cli_no_exit.diff
Revision: 1575643429
URL: https://bugs.php.net/patch-display.php?bug=78919&patch=cli_no_exit.diff&revision=1575643429
------------------------------------------------------------------------
[2019-12-06 14:42:35] cataphract@php.net
Description:
------------
If php_request_startup() fails, for instance because an extension throws an error during its RINIT,
then the CLI server doesn't run php_request_shutdown().
In particular, the memory manager will not be shutdown, which means that repeatedly issuing errors
during RINIT will result in eventually PHP running out of memory.
Test script:
---------------
See https://gist.github.com/cataphract/b3d6fca0dc31132a5d190d2de7d07db3
build the image and start a container. Then hit http://localhost:8080/ After 3 or requests, the CLI server will
exit due to lack of memory.
Expected result:
----------------
The server runs continuously.
Actual result:
--------------
The server exits after a couple of requests.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78919&edit=1