From b5db594fd277464104fce814d22f0b2207d6502d Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 27 Apr 2022 23:07:11 +0100 Subject: [PATCH] Refacto php_module_startup() (#8303) It only ever uses at most 1 additional modules --- main/main.c | 29 +++++++---------------------- main/php_main.h | 2 +- sapi/apache2handler/sapi_apache2.c | 5 +---- sapi/cgi/cgi_main.c | 5 +---- sapi/cli/php_cli.c | 5 +---- sapi/cli/php_cli_server.c | 2 +- sapi/embed/php_embed.c | 5 +---- sapi/fpm/fpm/fpm_main.c | 5 +---- sapi/fuzzer/fuzzer-sapi.c | 5 +---- sapi/litespeed/lsapi_main.c | 4 ++-- sapi/phpdbg/phpdbg.c | 2 +- 11 files changed, 18 insertions(+), 51 deletions(-) diff --git a/main/main.c b/main/main.c index dc705fcdbdf..512a7a8b7f0 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 661c8844652..50351da0e63 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 7933e6accea..5238b02bbd6 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 ef6a62be73c..4f9a71bfac6 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -967,10 +967,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 97955eadd1f..5a161fcb23c 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -407,10 +407,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 6e7a909b128..7a8ec7918e2 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 1679246ab98..4b94bd98e66 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 b04763d6248..8ce59a43b41 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -767,10 +767,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 a9d2ce89a8b..3a79e273106 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 e034a3fdffa..b069f6d355b 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 e8d796771f9..de05a6fec60 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -706,7 +706,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; }