Skip to content
Open
8 changes: 8 additions & 0 deletions UPGRADING.INTERNALS
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ PHP 8.6 INTERNALS UPGRADE NOTES
longer is a pointer, but a directly embedded HashTable struct.
. Added a C23_ENUM() helper macro to define forward-compatible fixed-size
enums.
. The INI_STR(), INI_INT(), INI_FLT(), and INI_BOOL() macros have been
removed. Instead new zend_ini_{bool|long|double|str|string}_literal()
macros have been added. This fixes an internal naming inconsistency as
"str" usually means zend_string*, and "string" means char*.
However INI_STR() returned a char*
. The INI_ORIG_{INT|STR|FLT|BOOL}() macros have been removed as they are
unused. If this behaviour is required fall back to the zend_ini_*
functions.

========================
2. Build system changes
Expand Down
6 changes: 3 additions & 3 deletions Zend/zend_fibers.c
Original file line number Diff line number Diff line change
Expand Up @@ -572,9 +572,9 @@ static ZEND_STACK_ALIGNED void zend_fiber_execute(zend_fiber_transfer *transfer)
zend_fiber *fiber = EG(active_fiber);

/* 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")) {
zend_long error_reporting = zend_ini_long_literal("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_literal("error_reporting")) {
error_reporting = E_ALL;
}

Expand Down
4 changes: 2 additions & 2 deletions Zend/zend_highlight.c
Original file line number Diff line number Diff line change
Expand Up @@ -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("<pre><code style=\"color: %s\">", last_color);
/* highlight stuff coming back from zendlex() */
Expand Down
10 changes: 5 additions & 5 deletions Zend/zend_highlight.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;


Expand Down
4 changes: 2 additions & 2 deletions Zend/zend_ini.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,15 +491,15 @@ ZEND_API double zend_ini_double(const char *name, size_t name_length, bool orig)
}
/* }}} */

ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, bool orig, bool *exists) /* {{{ */
ZEND_API const char *zend_ini_string_ex(const char *name, size_t name_length, bool orig, bool *exists) /* {{{ */
{
zend_string *str = zend_ini_str_ex(name, name_length, orig, exists);

return str ? ZSTR_VAL(str) : NULL;
}
/* }}} */

ZEND_API char *zend_ini_string(const char *name, size_t name_length, bool orig) /* {{{ */
ZEND_API const char *zend_ini_string(const char *name, size_t name_length, bool orig) /* {{{ */
{
zend_string *str = zend_ini_str(name, name_length, orig);

Expand Down
20 changes: 8 additions & 12 deletions Zend/zend_ini.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,19 @@ ZEND_API void display_ini_entries(zend_module_entry *module);

ZEND_API zend_long zend_ini_long(const char *name, size_t name_length, bool orig);
ZEND_API double zend_ini_double(const char *name, size_t name_length, bool orig);
ZEND_API char *zend_ini_string(const char *name, size_t name_length, bool orig);
ZEND_API char *zend_ini_string_ex(const char *name, size_t name_length, bool orig, bool *exists);
ZEND_API const char *zend_ini_string(const char *name, size_t name_length, bool orig);
ZEND_API const char *zend_ini_string_ex(const char *name, size_t name_length, bool 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);
ZEND_API bool zend_ini_parse_bool(const zend_string *str);

#define zend_ini_bool_literal(name) zend_ini_parse_bool(zend_ini_str((name), sizeof("" name) - 1, false))
#define zend_ini_long_literal(name) zend_ini_long((name), sizeof("" name) - 1, false)
#define zend_ini_double_literal(name) zend_ini_double((name), sizeof("" name) - 1, false)
#define zend_ini_str_literal(name) zend_ini_str((name), sizeof("" name) - 1, false)
#define zend_ini_string_literal(name) zend_ini_string((name), sizeof("" name) - 1, false)

/**
* Parses an ini quantity
*
Expand Down Expand Up @@ -191,16 +197,6 @@ END_EXTERN_C()
ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb)
#endif

#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_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 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)
#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
Expand Down
4 changes: 2 additions & 2 deletions Zend/zend_multibyte.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ ZEND_API zend_result zend_multibyte_set_functions(const zend_multibyte_functions
* populated, we need to reinitialize script_encoding here.
*/
{
const char *value = zend_ini_string("zend.script_encoding", sizeof("zend.script_encoding") - 1, 0);
zend_multibyte_set_script_encoding_by_string(value, strlen(value));
const zend_string *value = zend_ini_str_literal("zend.script_encoding");
zend_multibyte_set_script_encoding_by_string(ZSTR_VAL(value), ZSTR_LEN(value));
}
return SUCCESS;
}
Expand Down
7 changes: 3 additions & 4 deletions ext/com_dotnet/com_dotnet.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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_literal("com.dotnet_version");
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);
Expand Down
6 changes: 2 additions & 4 deletions ext/curl/interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -1114,9 +1112,9 @@ 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 = zend_ini_string_literal("openssl.cafile");
if (!(cainfo && cainfo[0] != '\0')) {
cainfo = INI_STR("curl.cainfo");
cainfo = zend_ini_string_literal("curl.cainfo");
}
if (cainfo && cainfo[0] != '\0') {
curl_easy_setopt(ch->cp, CURLOPT_CAINFO, cainfo);
Expand Down
8 changes: 4 additions & 4 deletions ext/date/php_date.c
Original file line number Diff line number Diff line change
Expand Up @@ -5480,18 +5480,18 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, bool calc_s
ZEND_PARSE_PARAMETERS_END();

if (latitude_is_null) {
latitude = INI_FLT("date.default_latitude");
latitude = zend_ini_double_literal("date.default_latitude");
}

if (longitude_is_null) {
longitude = INI_FLT("date.default_longitude");
longitude = zend_ini_double_literal("date.default_longitude");
}

if (zenith_is_null) {
if (calc_sunset) {
zenith = INI_FLT("date.sunset_zenith");
zenith = zend_ini_double_literal("date.sunset_zenith");
} else {
zenith = INI_FLT("date.sunrise_zenith");
zenith = zend_ini_double_literal("date.sunrise_zenith");
}
}

Expand Down
2 changes: 1 addition & 1 deletion ext/gd/gd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1599,7 +1599,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,

#ifdef HAVE_GD_JPG
case PHP_GDIMG_TYPE_JPG:
ignore_warning = INI_INT("gd.jpeg_ignore_warning");
ignore_warning = zend_ini_bool_literal("gd.jpeg_ignore_warning");
im = gdImageCreateFromJpegEx(fp, ignore_warning);
break;
#endif
Expand Down
6 changes: 2 additions & 4 deletions ext/openssl/openssl_backend_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,10 +504,8 @@ 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_literal("openssl.cafile")));
add_assoc_str(return_value, "ini_capath", zend_string_copy(zend_ini_str_literal("openssl.capath")));
}

X509 *php_openssl_x509_from_str(
Expand Down
12 changes: 6 additions & 6 deletions ext/openssl/xp_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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_literal("openssl.cafile");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel this should be zend_ini_string_literal, since you don't actually use the stored length for further processing (i.e. OpenSSL takes a NUL-terminated C string).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The issue is that this leads to calling to zend_ini_str which returns an empty string if the INI setting exists, but the current code does the strlen() check to determine if it is an empty string or not and sets it back to NULL if so. And I don't want to change the behaviour of now sometimes passing an empty string to openssl.

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);
Expand All @@ -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_literal("openssl.capath");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

capath = ZSTR_LEN(capath_str) ? ZSTR_VAL(capath_str) : NULL;
}

if (cafile || capath) {
Expand Down
8 changes: 4 additions & 4 deletions ext/session/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -1638,15 +1638,15 @@ PHPAPI zend_result php_session_start(void)
break;

case php_session_disabled: {
const char *value = zend_ini_string(ZEND_STRL("session.save_handler"), false);
const char *value = zend_ini_string_literal("session.save_handler");
if (!PS(mod) && value) {
PS(mod) = _php_find_ps_module(value);
if (!PS(mod)) {
php_error_docref(NULL, E_WARNING, "Cannot find session save handler \"%s\" - session startup failed", value);
return FAILURE;
}
}
value = zend_ini_string(ZEND_STRL("session.serialize_handler"), false);
value = zend_ini_string_literal("session.serialize_handler");
if (!PS(serializer) && value) {
PS(serializer) = _php_find_ps_serializer(value);
if (!PS(serializer)) {
Expand Down Expand Up @@ -2759,14 +2759,14 @@ static zend_result php_rinit_session(bool auto_start)

PS(mod) = NULL;
{
const char *value = zend_ini_string(ZEND_STRL("session.save_handler"), false);
const char *value = zend_ini_string_literal("session.save_handler");
if (value) {
PS(mod) = _php_find_ps_module(value);
}
}

if (PS(serializer) == NULL) {
const char *value = zend_ini_string(ZEND_STRL("session.serialize_handler"), false);
const char *value = zend_ini_string_literal("session.serialize_handler");
if (value) {
PS(serializer) = _php_find_ps_serializer(value);
}
Expand Down
4 changes: 2 additions & 2 deletions ext/soap/soap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1665,7 +1665,7 @@ PHP_METHOD(SoapServer, handle)
sapi_add_header("Content-Type: text/xml; charset=utf-8", sizeof("Content-Type: text/xml; charset=utf-8")-1, 1);
}

if (INI_INT("zlib.output_compression")) {
if (zend_ini_long_literal("zlib.output_compression")) {
sapi_add_header("Connection: close", sizeof("Connection: close")-1, 1);
} else {
snprintf(cont_len, sizeof(cont_len), "Content-Length: %d", size);
Expand Down Expand Up @@ -1827,7 +1827,7 @@ static void soap_server_fault_ex(sdlFunctionPtr function, zval* fault, soapHeade
if (use_http_error_status) {
sapi_add_header("HTTP/1.1 500 Internal Server Error", sizeof("HTTP/1.1 500 Internal Server Error")-1, 1);
}
if (INI_INT("zlib.output_compression")) {
if (zend_ini_long_literal("zlib.output_compression")) {
sapi_add_header("Connection: close", sizeof("Connection: close")-1, 1);
} else {
snprintf(cont_len, sizeof(cont_len), "Content-Length: %d", size);
Expand Down
17 changes: 8 additions & 9 deletions ext/standard/basic_functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -1717,11 +1717,11 @@ PHPAPI bool append_user_shutdown_function(php_shutdown_function_entry *shutdown_

ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini) /* {{{ */
{
syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
syntax_highlighter_ini->highlight_default = INI_STR("highlight.default");
syntax_highlighter_ini->highlight_html = INI_STR("highlight.html");
syntax_highlighter_ini->highlight_keyword = INI_STR("highlight.keyword");
syntax_highlighter_ini->highlight_string = INI_STR("highlight.string");
syntax_highlighter_ini->highlight_comment = zend_ini_string_literal("highlight.comment");
syntax_highlighter_ini->highlight_default = zend_ini_string_literal("highlight.default");
syntax_highlighter_ini->highlight_html = zend_ini_string_literal("highlight.html");
syntax_highlighter_ini->highlight_keyword = zend_ini_string_literal("highlight.keyword");
syntax_highlighter_ini->highlight_string = zend_ini_string_literal("highlight.string");
}
/* }}} */

Expand Down Expand Up @@ -2029,17 +2029,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_literal("include_path");
/* copy to return here, because alter might free it! */
if (old_value) {
RETVAL_STRING(old_value);
RETVAL_STR_COPY(old_value);
} else {
RETVAL_FALSE;
}
Expand All @@ -2059,7 +2058,7 @@ PHP_FUNCTION(get_include_path)
{
ZEND_PARSE_PARAMETERS_NONE();

zend_string *str = zend_ini_str("include_path", sizeof("include_path") - 1, 0);
zend_string *str = zend_ini_str_literal("include_path");

if (str == NULL) {
RETURN_FALSE;
Expand Down
6 changes: 3 additions & 3 deletions ext/standard/browscap.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ static void php_browscap_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callb
) {
zend_error(E_CORE_ERROR, "Invalid browscap ini file: "
"'Parent' value cannot be same as the section name: %s "
"(in file %s)", ZSTR_VAL(ctx->current_section_name), INI_STR("browscap"));
"(in file %s)", ZSTR_VAL(ctx->current_section_name), zend_ini_string_literal("browscap"));
return;
}

Expand Down Expand Up @@ -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};
Expand Down Expand Up @@ -499,7 +499,7 @@ PHP_INI_MH(OnChangeBrowscap)

PHP_MINIT_FUNCTION(browscap) /* {{{ */
{
char *browscap = INI_STR("browscap");
const char *browscap = zend_ini_string_literal("browscap");

#ifdef ZTS
ts_allocate_id(&browscap_globals_id, sizeof(browser_data), (ts_allocate_ctor) browscap_globals_ctor, NULL);
Expand Down
4 changes: 2 additions & 2 deletions ext/standard/dl.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,11 @@ 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) {
extension_dir = INI_STR("extension_dir");
extension_dir = zend_ini_string_literal("extension_dir");
} else {
extension_dir = PG(extension_dir);
}
Expand Down
Loading
Loading