diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 27414f52b3754..164340d7108d7 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -70,6 +70,8 @@ PHP 8.6 INTERNALS UPGRADE NOTES performed on the result. . The zend_dval_to_lval_cap() function no longer takes a second zend_string* parameter. + . The zend_ini_string{_ex} functions (and thus INI_STR() and INI_ORIG_STR() + macros) now return a const char* instead of a char*. ======================== 2. Build system changes diff --git a/Zend/zend_fibers.c b/Zend/zend_fibers.c index d571a622e476b..4986e3a92b0b5 100644 --- a/Zend/zend_fibers.c +++ b/Zend/zend_fibers.c @@ -573,8 +573,8 @@ static ZEND_STACK_ALIGNED void zend_fiber_execute(zend_fiber_transfer *transfer) /* Determine the current error_reporting ini setting. */ zend_long error_reporting = INI_INT("error_reporting"); - /* If error_reporting is 0 and not explicitly set to 0, INI_STR returns a null pointer. */ - if (!error_reporting && !INI_STR("error_reporting")) { + /* If error_reporting is 0 and not explicitly set to 0, zend_ini_str returns a null pointer. */ + if (!error_reporting && !zend_ini_str(ZEND_STRL("error_reporting"), false)) { error_reporting = E_ALL; } diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index 5c3cd136d5807..c5fc874b9cb5f 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -79,8 +79,8 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini { zval token; int token_type; - char *last_color = syntax_highlighter_ini->highlight_html; - char *next_color; + const char *last_color = syntax_highlighter_ini->highlight_html; + const char *next_color; zend_printf("
", last_color);
/* highlight stuff coming back from zendlex() */
diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h
index 04688d65132b2..adc1d3c8c81e0 100644
--- a/Zend/zend_highlight.h
+++ b/Zend/zend_highlight.h
@@ -30,11 +30,11 @@
typedef struct _zend_syntax_highlighter_ini {
- char *highlight_html;
- char *highlight_comment;
- char *highlight_default;
- char *highlight_string;
- char *highlight_keyword;
+ const char *highlight_html;
+ const char *highlight_comment;
+ const char *highlight_default;
+ const char *highlight_string;
+ const char *highlight_keyword;
} zend_syntax_highlighter_ini;
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c
index 5e3a12e455379..b353261d28c43 100644
--- a/Zend/zend_ini.c
+++ b/Zend/zend_ini.c
@@ -491,7 +491,7 @@ ZEND_API double zend_ini_double(const char *name, size_t name_length, int orig)
}
/* }}} */
-ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, int orig, bool *exists) /* {{{ */
+ZEND_API const char *zend_ini_string_ex(const char *name, size_t name_length, int orig, bool *exists) /* {{{ */
{
zend_string *str = zend_ini_str_ex(name, name_length, orig, exists);
@@ -499,7 +499,7 @@ ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, int orig
}
/* }}} */
-ZEND_API char *zend_ini_string(const char *name, size_t name_length, int orig) /* {{{ */
+ZEND_API const char *zend_ini_string(const char *name, size_t name_length, int orig) /* {{{ */
{
zend_string *str = zend_ini_str(name, name_length, orig);
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h
index 4bb90d6ef0a74..ded5f55ec1f1f 100644
--- a/Zend/zend_ini.h
+++ b/Zend/zend_ini.h
@@ -88,8 +88,8 @@ ZEND_API void display_ini_entries(zend_module_entry *module);
ZEND_API zend_long zend_ini_long(const char *name, size_t name_length, int orig);
ZEND_API double zend_ini_double(const char *name, size_t name_length, int orig);
-ZEND_API char *zend_ini_string(const char *name, size_t name_length, int orig);
-ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, int orig, bool *exists);
+ZEND_API const char *zend_ini_string(const char *name, size_t name_length, int orig);
+ZEND_API const char *zend_ini_string_ex(const char *name, size_t name_length, int orig, bool *exists);
ZEND_API zend_string *zend_ini_str(const char *name, size_t name_length, bool orig);
ZEND_API zend_string *zend_ini_str_ex(const char *name, size_t name_length, bool orig, bool *exists);
ZEND_API zend_string *zend_ini_get_value(zend_string *name);
@@ -194,12 +194,12 @@ END_EXTERN_C()
#define INI_INT(name) zend_ini_long((name), strlen(name), 0)
#define INI_FLT(name) zend_ini_double((name), strlen(name), 0)
#define INI_STR(name) zend_ini_string_ex((name), strlen(name), 0, NULL)
-#define INI_BOOL(name) ((bool) INI_INT(name))
+#define INI_BOOL(name) zend_ini_parse_bool(zend_ini_str((name), strlen(name), false))
#define INI_ORIG_INT(name) zend_ini_long((name), strlen(name), 1)
#define INI_ORIG_FLT(name) zend_ini_double((name), strlen(name), 1)
#define INI_ORIG_STR(name) zend_ini_string((name), strlen(name), 1)
-#define INI_ORIG_BOOL(name) ((bool) INI_ORIG_INT(name))
+#define INI_ORIG_BOOL(name) zend_ini_parse_bool(zend_ini_str((name), strlen(name), true))
#define REGISTER_INI_ENTRIES() zend_register_ini_entries_ex(ini_entries, module_number, type)
#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries_ex(module_number, type)
diff --git a/ext/com_dotnet/com_dotnet.c b/ext/com_dotnet/com_dotnet.c
index f8b4a828e154a..7e03887d01f5f 100644
--- a/ext/com_dotnet/com_dotnet.c
+++ b/ext/com_dotnet/com_dotnet.c
@@ -127,7 +127,6 @@ static HRESULT dotnet_bind_runtime(LPVOID FAR *ppv)
typedef HRESULT (STDAPICALLTYPE *cbtr_t)(LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor, REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv);
cbtr_t CorBindToRuntime;
OLECHAR *oleversion;
- char *version;
mscoree = LoadLibraryA("mscoree.dll");
if (mscoree == NULL) {
@@ -140,11 +139,11 @@ static HRESULT dotnet_bind_runtime(LPVOID FAR *ppv)
return S_FALSE;
}
- version = INI_STR("com.dotnet_version");
- if (version == NULL || *version == '\0') {
+ const zend_string *version = zend_ini_str(ZEND_STRL("com.dotnet_version"), false);
+ if (version == NULL || ZSTR_LEN(version) == 0) {
oleversion = NULL;
} else {
- oleversion = php_com_string_to_olestring(version, strlen(version), COMG(code_page));
+ oleversion = php_com_string_to_olestring(ZSTR_VAL(version), ZSTR_LEN(version), COMG(code_page));
}
hr = CorBindToRuntime(oleversion, NULL, &CLSID_CorRuntimeHost, &IID_ICorRuntimeHost, ppv);
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 58558b71a5ebc..992e959450368 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -1100,8 +1100,6 @@ static void create_certinfo(struct curl_certinfo *ci, zval *listcode)
Set default options for a handle */
static void _php_curl_set_default_options(php_curl *ch)
{
- char *cainfo;
-
curl_easy_setopt(ch->cp, CURLOPT_NOPROGRESS, 1L);
curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 0L);
curl_easy_setopt(ch->cp, CURLOPT_ERRORBUFFER, ch->err.str);
@@ -1114,7 +1112,7 @@ static void _php_curl_set_default_options(php_curl *ch)
curl_easy_setopt(ch->cp, CURLOPT_DNS_CACHE_TIMEOUT, 120L);
curl_easy_setopt(ch->cp, CURLOPT_MAXREDIRS, 20L); /* prevent infinite redirects */
- cainfo = INI_STR("openssl.cafile");
+ const char* cainfo = INI_STR("openssl.cafile");
if (!(cainfo && cainfo[0] != '\0')) {
cainfo = INI_STR("curl.cainfo");
}
diff --git a/ext/openssl/openssl_backend_common.c b/ext/openssl/openssl_backend_common.c
index 8895e58869b19..3bacf24ed703e 100644
--- a/ext/openssl/openssl_backend_common.c
+++ b/ext/openssl/openssl_backend_common.c
@@ -504,10 +504,10 @@ void php_openssl_set_cert_locations(zval *return_value)
add_assoc_string(return_value, "default_cert_dir_env", (char *) X509_get_default_cert_dir_env());
add_assoc_string(return_value, "default_private_dir", (char *) X509_get_default_private_dir());
add_assoc_string(return_value, "default_default_cert_area", (char *) X509_get_default_cert_area());
- add_assoc_string(return_value, "ini_cafile",
- zend_ini_string("openssl.cafile", sizeof("openssl.cafile")-1, 0));
- add_assoc_string(return_value, "ini_capath",
- zend_ini_string("openssl.capath", sizeof("openssl.capath")-1, 0));
+ add_assoc_str(return_value, "ini_cafile",
+ zend_string_copy(zend_ini_str(ZEND_STRL("openssl.cafile"), false)));
+ add_assoc_str(return_value, "ini_capath",
+ zend_string_copy(zend_ini_str(ZEND_STRL("openssl.capath"), false)));
}
X509 *php_openssl_x509_from_str(
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index bd174f30095c6..c6e711361a2fc 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -880,16 +880,16 @@ static long php_openssl_load_stream_cafile(X509_STORE *cert_store, const char *c
static zend_result php_openssl_enable_peer_verification(SSL_CTX *ctx, php_stream *stream) /* {{{ */
{
zval *val = NULL;
- char *cafile = NULL;
- char *capath = NULL;
+ const char *cafile = NULL;
+ const char *capath = NULL;
php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
GET_VER_OPT_STRING("cafile", cafile);
GET_VER_OPT_STRING("capath", capath);
if (cafile == NULL) {
- cafile = zend_ini_string("openssl.cafile", sizeof("openssl.cafile")-1, 0);
- cafile = strlen(cafile) ? cafile : NULL;
+ const zend_string *cafile_str = zend_ini_str(ZEND_STRL("openssl.cafile"), false);
+ cafile = ZSTR_LEN(cafile_str) ? ZSTR_VAL(cafile_str) : NULL;
} else if (!sslsock->is_client) {
/* Servers need to load and assign CA names from the cafile */
STACK_OF(X509_NAME) *cert_names = SSL_load_client_CA_file(cafile);
@@ -902,8 +902,8 @@ static zend_result php_openssl_enable_peer_verification(SSL_CTX *ctx, php_stream
}
if (capath == NULL) {
- capath = zend_ini_string("openssl.capath", sizeof("openssl.capath")-1, 0);
- capath = strlen(capath) ? capath : NULL;
+ const zend_string *capath_str = zend_ini_str(ZEND_STRL("openssl.capath"), false);
+ capath = ZSTR_LEN(capath_str) ? ZSTR_VAL(capath_str) : NULL;
}
if (cafile || capath) {
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 0f802bc128a20..4bfcf3d77ead7 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -2020,17 +2020,16 @@ PHP_FUNCTION(ini_restore)
PHP_FUNCTION(set_include_path)
{
zend_string *new_value;
- char *old_value;
zend_string *key;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_PATH_STR(new_value)
ZEND_PARSE_PARAMETERS_END();
- old_value = zend_ini_string("include_path", sizeof("include_path") - 1, 0);
+ zend_string *old_value = zend_ini_str("include_path", sizeof("include_path") - 1, false);
/* copy to return here, because alter might free it! */
if (old_value) {
- RETVAL_STRING(old_value);
+ RETVAL_STR_COPY(old_value);
} else {
RETVAL_FALSE;
}
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index 5009c7793688c..1a49d1c3eab8e 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -399,7 +399,7 @@ static void php_browscap_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callb
}
/* }}} */
-static zend_result browscap_read_file(char *filename, browser_data *browdata, bool persistent) /* {{{ */
+static zend_result browscap_read_file(const char *filename, browser_data *browdata, bool persistent) /* {{{ */
{
zend_file_handle fh;
browscap_parser_ctx ctx = {0};
@@ -499,7 +499,7 @@ PHP_INI_MH(OnChangeBrowscap)
PHP_MINIT_FUNCTION(browscap) /* {{{ */
{
- char *browscap = INI_STR("browscap");
+ const char *browscap = INI_STR("browscap");
#ifdef ZTS
ts_allocate_id(&browscap_globals_id, sizeof(browser_data), (ts_allocate_ctor) browscap_globals_ctor, NULL);
diff --git a/ext/standard/dl.c b/ext/standard/dl.c
index 31adbceac8c29..d69a1d3d48dff 100644
--- a/ext/standard/dl.c
+++ b/ext/standard/dl.c
@@ -114,7 +114,7 @@ PHPAPI int php_load_extension(const char *filename, int type, int start_now)
zend_module_entry *module_entry;
zend_module_entry *(*get_module)(void);
int error_type, slash_suffix = 0;
- char *extension_dir;
+ const char *extension_dir;
char *err1, *err2;
if (type == MODULE_PERSISTENT) {
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 395c7bb81d4f9..1eb1b2cee0758 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -437,7 +437,7 @@ static int php_mail_detect_multiple_crlf(const char *hdr) {
PHPAPI bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const zend_string *extra_cmd)
{
FILE *sendmail;
- char *sendmail_path = INI_STR("sendmail_path");
+ const char *sendmail_path = INI_STR("sendmail_path");
char *sendmail_cmd = NULL;
const zend_string *mail_log = zend_ini_str(ZEND_STRL("mail.log"), false);
const char *hdr = headers;
@@ -553,7 +553,7 @@ PHPAPI bool php_mail(const char *to, const char *subject, const char *message, c
if (extra_cmd != NULL) {
spprintf(&sendmail_cmd, 0, "%s %s", sendmail_path, ZSTR_VAL(extra_cmd));
} else {
- sendmail_cmd = sendmail_path;
+ sendmail_cmd = (char*)sendmail_path;
}
#if PHP_SIGCHILD
@@ -701,7 +701,7 @@ PHPAPI bool php_mail(const char *to, const char *subject, const char *message, c
/* {{{ PHP_MINFO_FUNCTION */
PHP_MINFO_FUNCTION(mail)
{
- char *sendmail_path = INI_STR("sendmail_path");
+ const char *sendmail_path = INI_STR("sendmail_path");
#ifdef PHP_WIN32
if (!sendmail_path) {
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
index 9dcfb733a591f..829403d0e6ce4 100644
--- a/ext/tidy/tidy.c
+++ b/ext/tidy/tidy.c
@@ -873,7 +873,7 @@ static PHP_RINIT_FUNCTION(tidy)
static PHP_RSHUTDOWN_FUNCTION(tidy)
{
- TG(clean_output) = INI_ORIG_BOOL("tidy.clean_output");
+ TG(clean_output) = zend_ini_parse_bool(zend_ini_str(ZEND_STRL("tidy.clean_output"), true));
return SUCCESS;
}
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index 4a6bb81899c91..7cab83fb8900a 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -1267,7 +1267,6 @@ ZEND_GET_MODULE(php_zlib)
static PHP_INI_MH(OnUpdate_zlib_output_compression)
{
int int_value;
- char *ini_value;
if (new_value == NULL) {
return FAILURE;
}
@@ -1279,9 +1278,9 @@ static PHP_INI_MH(OnUpdate_zlib_output_compression)
} else {
int_value = (int) zend_ini_parse_quantity_warn(new_value, entry->name);
}
- ini_value = zend_ini_string("output_handler", sizeof("output_handler") - 1, 0);
+ const zend_string *ini_value = zend_ini_str(ZEND_STRL("output_handler"), false);
- if (ini_value && *ini_value && int_value) {
+ if (ini_value && ZSTR_LEN(ini_value) && int_value) {
php_error_docref("ref.outcontrol", E_CORE_ERROR, "Cannot use both zlib.output_compression and output_handler together!!");
return FAILURE;
}
diff --git a/main/main.c b/main/main.c
index 8062f92fe1bdb..739e8e2e00e6c 100644
--- a/main/main.c
+++ b/main/main.c
@@ -1471,8 +1471,8 @@ static ZEND_COLD void php_error_cb(int orig_type, zend_string *error_filename, c
if (PG(xmlrpc_errors)) {
php_printf("faultCode " ZEND_LONG_FMT " faultString %s:%s in %s on line %" PRIu32 "%s%s ", PG(xmlrpc_error_number), error_type_str, ZSTR_VAL(message), ZSTR_VAL(error_filename), error_lineno, ZSTR_LEN(backtrace) ? "\nStack trace:\n" : "", ZSTR_VAL(backtrace));
} else {
- char *prepend_string = INI_STR("error_prepend_string");
- char *append_string = INI_STR("error_append_string");
+ const char *prepend_string = INI_STR("error_prepend_string");
+ const char *append_string = INI_STR("error_append_string");
if (PG(html_errors)) {
if (type == E_ERROR || type == E_PARSE) {
diff --git a/main/php_ini.c b/main/php_ini.c
index e464c05d1fcc1..800191285b87e 100644
--- a/main/php_ini.c
+++ b/main/php_ini.c
@@ -334,7 +334,7 @@ static void php_load_zend_extension_cb(void *arg)
} else {
DL_HANDLE handle;
char *libpath;
- char *extension_dir = INI_STR("extension_dir");
+ const char *extension_dir = INI_STR("extension_dir");
int slash_suffix = 0;
char *err1, *err2;
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c
index 9566c1abd4eec..ca5fff6ee5908 100644
--- a/sapi/phpdbg/phpdbg_prompt.c
+++ b/sapi/phpdbg/phpdbg_prompt.c
@@ -1190,19 +1190,16 @@ static void add_zendext_info(zend_extension *ext) /* {{{ */ {
#ifdef HAVE_LIBDL
PHPDBG_API const char *phpdbg_load_module_or_extension(char **path, const char **name) /* {{{ */ {
DL_HANDLE handle;
- char *extension_dir;
-
- extension_dir = INI_STR("extension_dir");
+ zend_string *extension_dir = zend_ini_str(ZEND_STRL("extension_dir"), false);
if (strchr(*path, '/') != NULL || strchr(*path, DEFAULT_SLASH) != NULL) {
/* path is fine */
- } else if (extension_dir && extension_dir[0]) {
+ } else if (extension_dir && ZSTR_LEN(extension_dir)) {
char *libpath;
- int extension_dir_len = strlen(extension_dir);
- if (IS_SLASH(extension_dir[extension_dir_len-1])) {
- spprintf(&libpath, 0, "%s%s", extension_dir, *path); /* SAFE */
+ if (IS_SLASH(ZSTR_VAL(extension_dir)[ZSTR_LEN(extension_dir-1)])) {
+ spprintf(&libpath, 0, "%s%s", ZSTR_VAL(extension_dir), *path); /* SAFE */
} else {
- spprintf(&libpath, 0, "%s%c%s", extension_dir, DEFAULT_SLASH, *path); /* SAFE */
+ spprintf(&libpath, 0, "%s%c%s", ZSTR_VAL(extension_dir), DEFAULT_SLASH, *path); /* SAFE */
}
efree(*path);
*path = libpath;