diff options
author | Valentin Bartenev <vbart@nginx.com> | 2021-11-25 19:58:54 +0300 |
---|---|---|
committer | Valentin Bartenev <vbart@nginx.com> | 2021-11-25 19:58:54 +0300 |
commit | d4b13c7cd5520b2b8bd8833765a3ba4246a93df7 (patch) | |
tree | 3673e5bc0ad860e72ab92b29b61018450aaf4632 | |
parent | 7ed38c9efe97529784c65e2b25e440b817d364bb (diff) | |
download | unit-d4b13c7cd5520b2b8bd8833765a3ba4246a93df7.tar.gz unit-d4b13c7cd5520b2b8bd8833765a3ba4246a93df7.tar.bz2 |
PHP: fixed crash when calling module functions in OPcache preload.
In PHP, custom fastcgi_finish_request() and overloaded chdir() functions can be
invoked by an OPcache preloading script (it runs when php_module_startup() is
called in the app process setup handler). In this case, there was no runtime
context set so trying to access it caused a segmentation fault.
This closes #602 issue on GitHub.
-rw-r--r-- | docs/changes.xml | 7 | ||||
-rw-r--r-- | src/nxt_php_sapi.c | 7 |
2 files changed, 12 insertions, 2 deletions
diff --git a/docs/changes.xml b/docs/changes.xml index e1ad0434..ba86da5e 100644 --- a/docs/changes.xml +++ b/docs/changes.xml @@ -45,6 +45,13 @@ appeared in 1.26.0. </para> </change> +<change type="bugfix"> +<para> +a segmentation fault occurred in the PHP module if chdir() or +fastcgi_finish_request() was called in the OPcache preloading script. +</para> +</change> + </changes> diff --git a/src/nxt_php_sapi.c b/src/nxt_php_sapi.c index ea5f5581..68ef07eb 100644 --- a/src/nxt_php_sapi.c +++ b/src/nxt_php_sapi.c @@ -204,7 +204,10 @@ ZEND_NAMED_FUNCTION(nxt_php_chdir) nxt_php_run_ctx_t *ctx; ctx = SG(server_context); - ctx->chdir = 1; + + if (nxt_fast_path(ctx != NULL)) { + ctx->chdir = 1; + } nxt_php_chdir_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU); } @@ -225,7 +228,7 @@ PHP_FUNCTION(fastcgi_finish_request) ctx = SG(server_context); - if (nxt_slow_path(ctx->req == NULL)) { + if (nxt_slow_path(ctx == NULL || ctx->req == NULL)) { RETURN_FALSE; } |