Skip to content

Commit d6fc743

Browse files
authored
zend_string: Simplify logic in zend_interned_strings_init() (#18922)
No need to manually init a `zend_string` to then intern it, we can directly intern it while initializing, bypassing some of the safety checks that are redundant in this case.
1 parent ecc602e commit d6fc743

File tree

1 file changed

+5
-10
lines changed

1 file changed

+5
-10
lines changed

Zend/zend_string.c

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ static zend_always_inline void zend_init_interned_strings_ht(HashTable *interned
8686
ZEND_API void zend_interned_strings_init(void)
8787
{
8888
char s[2];
89-
unsigned int i;
90-
zend_string *str;
9189

9290
interned_string_request_handler = zend_new_interned_string_request;
9391
interned_string_init_request_handler = zend_string_init_interned_request;
@@ -103,25 +101,22 @@ ZEND_API void zend_interned_strings_init(void)
103101
zend_string_init_existing_interned = zend_string_init_existing_interned_permanent;
104102

105103
/* interned empty string */
106-
str = zend_string_alloc(sizeof("")-1, 1);
107-
ZSTR_VAL(str)[0] = '\000';
108-
zend_empty_string = zend_new_interned_string_permanent(str);
104+
zend_empty_string = zend_string_init_interned_permanent("", 0, true);
109105
GC_ADD_FLAGS(zend_empty_string, IS_STR_VALID_UTF8);
110106

111107
s[1] = 0;
112-
for (i = 0; i < 256; i++) {
108+
for (size_t i = 0; i < 256; i++) {
113109
s[0] = i;
114-
zend_one_char_string[i] = zend_new_interned_string_permanent(zend_string_init(s, 1, 1));
110+
zend_one_char_string[i] = zend_string_init_interned_permanent(s, 1, true);
115111
if (i < 0x80) {
116112
GC_ADD_FLAGS(zend_one_char_string[i], IS_STR_VALID_UTF8);
117113
}
118114
}
119115

120116
/* known strings */
121117
zend_known_strings = pemalloc(sizeof(zend_string*) * ((sizeof(known_strings) / sizeof(known_strings[0]) - 1)), 1);
122-
for (i = 0; i < (sizeof(known_strings) / sizeof(known_strings[0])) - 1; i++) {
123-
str = zend_string_init(known_strings[i], strlen(known_strings[i]), 1);
124-
zend_known_strings[i] = zend_new_interned_string_permanent(str);
118+
for (size_t i = 0; i < (sizeof(known_strings) / sizeof(known_strings[0])) - 1; i++) {
119+
zend_known_strings[i] = zend_string_init_interned_permanent(known_strings[i], strlen(known_strings[i]), true);
125120
GC_ADD_FLAGS(zend_known_strings[i], IS_STR_VALID_UTF8);
126121
}
127122
}

0 commit comments

Comments
 (0)