]> granicus.if.org Git - php/commitdiff
fix FCGI crash in TS mode
authorAnatol Belski <ab@php.net>
Sun, 28 Jun 2015 19:47:02 +0000 (21:47 +0200)
committerAnatol Belski <ab@php.net>
Mon, 29 Jun 2015 05:33:19 +0000 (07:33 +0200)
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.

sapi/cgi/cgi_main.c

index 73b9d774a71582cb1511066cde8c6118d9504bfd..529824b6a6bda1e69571415458bae3ef0cde7fb0 100644 (file)
@@ -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;