diff --git a/main/main.c b/main/main.c index 2a417987f3148..d6e01ed6b3b02 100644 --- a/main/main.c +++ b/main/main.c @@ -1960,24 +1960,6 @@ int php_register_extensions(zend_module_entry * const * ptr, int count) return SUCCESS; } -/* A very long time ago php_module_startup() was refactored in a way - * which broke calling it with more than one additional module. - * This alternative to php_register_extensions() works around that - * by walking the shallower structure. - * - * See algo: https://bugs.php.net/bug.php?id=63159 - */ -static int php_register_extensions_bc(zend_module_entry *ptr, int count) -{ - while (count--) { - if (zend_register_internal_module(ptr++) == NULL) { - return FAILURE; - } - } - return SUCCESS; -} -/* }}} */ - #ifdef PHP_WIN32 static _invalid_parameter_handler old_invalid_parameter_handler; @@ -2012,11 +1994,12 @@ void dummy_invalid_parameter_handler( #endif /* {{{ php_module_startup */ -int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint32_t num_additional_modules) +zend_result php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_module) { zend_utility_functions zuf; zend_utility_values zuv; - int retval = SUCCESS, module_number=0; /* for REGISTER_INI_ENTRIES() */ + zend_result retval = SUCCESS; + int module_number = 0; /* for REGISTER_INI_ENTRIES() */ char *php_os; zend_module_entry *module; @@ -2243,7 +2226,9 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod } /* start additional PHP extensions */ - php_register_extensions_bc(additional_modules, num_additional_modules); + if (additional_module && (zend_register_internal_module(additional_module) == NULL)) { + return FAILURE; + } /* load and startup extensions compiled as shared objects (aka DLLs) as requested by php.ini entries @@ -2278,7 +2263,7 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod module->version = PHP_VERSION; module->info_func = PHP_MINFO(php_core); } - + /* freeze the list of observer fcall_init handlers */ zend_observer_post_startup(); diff --git a/main/php_main.h b/main/php_main.h index 661c88446524f..50351da0e6391 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -25,7 +25,7 @@ BEGIN_EXTERN_C() PHPAPI int php_request_startup(void); PHPAPI void php_request_shutdown(void *dummy); -PHPAPI int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint32_t num_additional_modules); +PHPAPI zend_result php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_module); PHPAPI void php_module_shutdown(void); PHPAPI int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals); diff --git a/sapi/apache2handler/sapi_apache2.c b/sapi/apache2handler/sapi_apache2.c index 7933e6accea38..5238b02bbd625 100644 --- a/sapi/apache2handler/sapi_apache2.c +++ b/sapi/apache2handler/sapi_apache2.c @@ -378,10 +378,7 @@ extern zend_module_entry php_apache_module; static int php_apache2_startup(sapi_module_struct *sapi_module) { - if (php_module_startup(sapi_module, &php_apache_module, 1)==FAILURE) { - return FAILURE; - } - return SUCCESS; + return php_module_startup(sapi_module, &php_apache_module); } static sapi_module_struct apache2_sapi_module = { diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index 7d5f444d1c54a..280a6389b11c0 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -966,10 +966,7 @@ static int sapi_cgi_deactivate(void) static int php_cgi_startup(sapi_module_struct *sapi_module) { - if (php_module_startup(sapi_module, &cgi_module_entry, 1) == FAILURE) { - return FAILURE; - } - return SUCCESS; + return php_module_startup(sapi_module, &cgi_module_entry); } /* {{{ sapi_module_struct cgi_sapi_module */ diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index fdd604cec53b0..4548263d6e2f8 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -406,10 +406,7 @@ static void sapi_cli_send_header(sapi_header_struct *sapi_header, void *server_c static int php_cli_startup(sapi_module_struct *sapi_module) /* {{{ */ { - if (php_module_startup(sapi_module, NULL, 0)==FAILURE) { - return FAILURE; - } - return SUCCESS; + return php_module_startup(sapi_module, NULL); } /* }}} */ diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 6e7a909b128d0..7a8ec7918e233 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -498,7 +498,7 @@ const zend_function_entry server_additional_functions[] = { static int sapi_cli_server_startup(sapi_module_struct *sapi_module) /* {{{ */ { - return php_module_startup(sapi_module, &cli_server_module_entry, 1); + return php_module_startup(sapi_module, &cli_server_module_entry); } /* }}} */ static size_t sapi_cli_server_ub_write(const char *str, size_t str_length) /* {{{ */ diff --git a/sapi/embed/php_embed.c b/sapi/embed/php_embed.c index 1679246ab9872..4b94bd98e66da 100644 --- a/sapi/embed/php_embed.c +++ b/sapi/embed/php_embed.c @@ -119,10 +119,7 @@ static void php_embed_register_variables(zval *track_vars_array) /* Module initialization (MINIT) */ static int php_embed_startup(sapi_module_struct *sapi_module) { - if (php_module_startup(sapi_module, NULL, 0) == FAILURE) { - return FAILURE; - } - return SUCCESS; + return php_module_startup(sapi_module, NULL); } EMBED_SAPI_API sapi_module_struct php_embed_module = { diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index 657ff72b673a1..3fa8f603d0fc0 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -766,10 +766,7 @@ static int sapi_cgi_deactivate(void) /* {{{ */ static int php_cgi_startup(sapi_module_struct *sapi_module) /* {{{ */ { - if (php_module_startup(sapi_module, &cgi_module_entry, 1) == FAILURE) { - return FAILURE; - } - return SUCCESS; + return php_module_startup(sapi_module, &cgi_module_entry); } /* }}} */ diff --git a/sapi/fuzzer/fuzzer-sapi.c b/sapi/fuzzer/fuzzer-sapi.c index a9d2ce89a8b6e..3a79e273106fa 100644 --- a/sapi/fuzzer/fuzzer-sapi.c +++ b/sapi/fuzzer/fuzzer-sapi.c @@ -62,10 +62,7 @@ const char HARDCODED_INI[] = static int startup(sapi_module_struct *sapi_module) { - if (php_module_startup(sapi_module, NULL, 0)==FAILURE) { - return FAILURE; - } - return SUCCESS; + return php_module_startup(sapi_module, NULL); } static size_t ub_write(const char *str, size_t str_length) diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c index e034a3fdffa92..b069f6d355b81 100644 --- a/sapi/litespeed/lsapi_main.c +++ b/sapi/litespeed/lsapi_main.c @@ -97,7 +97,7 @@ static void init_sapi_from_env(sapi_module_struct *sapi_module) /* {{{ php_lsapi_startup */ static int php_lsapi_startup(sapi_module_struct *sapi_module) { - if (php_module_startup(sapi_module, NULL, 0)==FAILURE) { + if (php_module_startup(sapi_module, NULL)==FAILURE) { return FAILURE; } argv0 = sapi_module->executable_location; @@ -1518,7 +1518,7 @@ int main( int argc, char * argv[] ) lsapi_sapi_module.ini_defaults = sapi_lsapi_ini_defaults; - if (php_module_startup(&lsapi_sapi_module, &litespeed_module_entry, 1) == FAILURE) { + if (php_module_startup(&lsapi_sapi_module, &litespeed_module_entry) == FAILURE) { #ifdef ZTS tsrm_shutdown(); #endif diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 42a2a9c036432..fddadab821edb 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -705,7 +705,7 @@ static zend_module_entry sapi_phpdbg_module_entry = { static inline int php_sapi_phpdbg_module_startup(sapi_module_struct *module) /* {{{ */ { - if (php_module_startup(module, &sapi_phpdbg_module_entry, 1) == FAILURE) { + if (php_module_startup(module, &sapi_phpdbg_module_entry) == FAILURE) { return FAILURE; }