summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-06-28 21:47:02 +0200
committerAnatol Belski <ab@php.net>2015-06-29 07:33:19 +0200
commit8430ec1788350fc45bcb2d209ff8696972ca12d1 (patch)
tree90fa65733ff86c72cc0e7a9dfaef2f8ca8cd8870
parentb34f9bc2e9df124c790d14b98c7746246d108e3d (diff)
downloadphp-git-8430ec1788350fc45bcb2d209ff8696972ca12d1.tar.gz
fix FCGI crash in TS mode
If CGI TS build is used, and there are some hard errors (fe missing dependency .dll or .so), the core will want to log it. The CGI log function will want to check whether fcgi_logging is enabled. But, if this kind of error happens in the extension register phase, MINIT for the CGI module is most likely wasn't run yet (startup phase). That will result in accessing uninitialized globals and a crash.
-rw-r--r--sapi/cgi/cgi_main.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 73b9d774a7..529824b6a6 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -1470,11 +1470,6 @@ static void php_cgi_globals_ctor(php_cgi_globals_struct *php_cgi_globals)
*/
static PHP_MINIT_FUNCTION(cgi)
{
-#ifdef ZTS
- ts_allocate_id(&php_cgi_globals_id, sizeof(php_cgi_globals_struct), (ts_allocate_ctor) php_cgi_globals_ctor, NULL);
-#else
- php_cgi_globals_ctor(&php_cgi_globals);
-#endif
REGISTER_INI_ENTRIES();
return SUCCESS;
}
@@ -1778,6 +1773,12 @@ int main(int argc, char *argv[])
ZEND_TSRMLS_CACHE_UPDATE();
#endif
+#ifdef ZTS
+ ts_allocate_id(&php_cgi_globals_id, sizeof(php_cgi_globals_struct), (ts_allocate_ctor) php_cgi_globals_ctor, NULL);
+#else
+ php_cgi_globals_ctor(&php_cgi_globals);
+#endif
+
sapi_startup(&cgi_sapi_module);
fastcgi = fcgi_is_fastcgi();
cgi_sapi_module.php_ini_path_override = NULL;