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.
This commit is contained in:
Anatol Belski 2015-06-28 21:47:02 +02:00
parent b34f9bc2e9
commit 8430ec1788

View file

@ -1470,11 +1470,6 @@ static void php_cgi_globals_ctor(php_cgi_globals_struct *php_cgi_globals)
*/ */
static PHP_MINIT_FUNCTION(cgi) 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(); REGISTER_INI_ENTRIES();
return SUCCESS; return SUCCESS;
} }
@ -1778,6 +1773,12 @@ int main(int argc, char *argv[])
ZEND_TSRMLS_CACHE_UPDATE(); ZEND_TSRMLS_CACHE_UPDATE();
#endif #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); sapi_startup(&cgi_sapi_module);
fastcgi = fcgi_is_fastcgi(); fastcgi = fcgi_is_fastcgi();
cgi_sapi_module.php_ini_path_override = NULL; cgi_sapi_module.php_ini_path_override = NULL;