From f77719d8005ad3c0684ba1b40c83e8463b204b5a Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Wed, 31 Dec 2008 14:27:09 +0000 Subject: [PATCH] MFH - Changed dl() to be disabled by default. Enabled only when explicitly registered by the SAPI layer. Enabled only with CLI, CGI and EMBED. (Dmitry) [DOC] --- NEWS | 2 ++ ext/standard/basic_functions.c | 3 --- main/SAPI.h | 1 + main/main.c | 9 +++++++++ sapi/cgi/cgi_main.c | 12 ++++++++++++ sapi/cli/php_cli.c | 12 ++++++++++++ sapi/embed/php_embed.c | 13 +++++++++++++ 7 files changed, 49 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 96d6dade5c..f579a7be07 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ PHP NEWS - Deprecated session_register(), session_unregister() and session_is_registered(). (Hannes) +- Changed dl() to be disabled by default. Enabled only when explicitly + registered by the SAPI layer. Enabled only with CLI, CGI and EMBED. (Dmitry) - Changed opendir(), dir() and scandir() to use default context when no context argument is passed. (Sara) - Changed open_basedir to allow tightening in runtime contexts. (Sara) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 7d87b9a7db..c986e8034c 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -3025,9 +3025,6 @@ const zend_function_entry basic_functions[] = { /* {{{ */ PHP_FE(is_scalar, arginfo_is_scalar) PHP_FE(is_callable, arginfo_is_callable) - /* functions from dl.c */ - PHP_FE(dl, arginfo_dl) - /* functions from file.c */ PHP_FE(pclose, arginfo_pclose) PHP_FE(popen, arginfo_popen) diff --git a/main/SAPI.h b/main/SAPI.h index 4431071d54..5907688b43 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -264,6 +264,7 @@ struct _sapi_module_struct { int phpinfo_as_text; char *ini_entries; + const zend_function_entry *additional_functions; }; diff --git a/main/main.c b/main/main.c index f33fb83ffc..7ab84d2c2c 100644 --- a/main/main.c +++ b/main/main.c @@ -1910,6 +1910,15 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod /* start Zend extensions */ zend_startup_extensions(); + /* register additional functions */ + if (sapi_module.additional_functions) { + if (zend_hash_find(&module_registry, "standard", sizeof("standard"), (void**)&module)==SUCCESS) { + EG(current_module) = module; + zend_register_functions(NULL, sapi_module.additional_functions, NULL, MODULE_PERSISTENT TSRMLS_CC); + EG(current_module) = NULL; + } + } + /* make core report what it should */ if (zend_hash_find(&module_registry, "core", sizeof("core"), (void**)&module)==SUCCESS) { module->version = PHP_VERSION; diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c index f0cec7ca8a..4d40499f2b 100644 --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c @@ -850,6 +850,17 @@ static sapi_module_struct cgi_sapi_module = { }; /* }}} */ +/* {{{ arginfo ext/standard/dl.c */ +ZEND_BEGIN_ARG_INFO(arginfo_dl, 0) + ZEND_ARG_INFO(0, extension_filename) +ZEND_END_ARG_INFO() +/* }}} */ + +static const zend_function_entry additional_functions[] = { + ZEND_FE(dl, arginfo_dl) + {NULL, NULL, NULL} +}; + /* {{{ php_cgi_usage */ static void php_cgi_usage(char *argv0) @@ -1534,6 +1545,7 @@ int main(int argc, char *argv[]) #endif cgi_sapi_module.executable_location = argv[0]; + cgi_sapi_module.additional_functions = additional_functions; /* startup after we get the above ini override se we get things right */ if (cgi_sapi_module.startup(&cgi_sapi_module) == FAILURE) { diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index 2b458a503c..519217fa24 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -426,6 +426,17 @@ static sapi_module_struct cli_sapi_module = { }; /* }}} */ +/* {{{ arginfo ext/standard/dl.c */ +ZEND_BEGIN_ARG_INFO(arginfo_dl, 0) + ZEND_ARG_INFO(0, extension_filename) +ZEND_END_ARG_INFO() +/* }}} */ + +static const zend_function_entry additional_functions[] = { + ZEND_FE(dl, arginfo_dl) + {NULL, NULL, NULL} +}; + /* {{{ php_cli_usage */ static void php_cli_usage(char *argv0) @@ -704,6 +715,7 @@ int main(int argc, char *argv[]) php_optarg = orig_optarg; cli_sapi_module.executable_location = argv[0]; + cli_sapi_module.additional_functions = additional_functions; /* startup after we get the above ini override se we get things right */ if (cli_sapi_module.startup(&cli_sapi_module)==FAILURE) { diff --git a/sapi/embed/php_embed.c b/sapi/embed/php_embed.c index 99e8882fec..3d93947173 100644 --- a/sapi/embed/php_embed.c +++ b/sapi/embed/php_embed.c @@ -140,6 +140,17 @@ sapi_module_struct php_embed_module = { }; /* }}} */ +/* {{{ arginfo ext/standard/dl.c */ +ZEND_BEGIN_ARG_INFO(arginfo_dl, 0) + ZEND_ARG_INFO(0, extension_filename) +ZEND_END_ARG_INFO() +/* }}} */ + +static const zend_function_entry additional_functions[] = { + ZEND_FE(dl, arginfo_dl) + {NULL, NULL, NULL} +}; + int php_embed_init(int argc, char **argv PTSRMLS_DC) { zend_llist global_vars; @@ -176,6 +187,8 @@ int php_embed_init(int argc, char **argv PTSRMLS_DC) php_embed_module.ini_entries = malloc(sizeof(HARDCODED_INI)); memcpy(php_embed_module.ini_entries, HARDCODED_INI, sizeof(HARDCODED_INI)); + php_embed_module.additional_functions = additional_functions; + if (argv) { php_embed_module.executable_location = argv[0]; } -- 2.40.0