Skip to content

Commit 0a68147

Browse files
committed
tighten up namespaces
1 parent 9579c43 commit 0a68147

File tree

3 files changed

+8
-38
lines changed

3 files changed

+8
-38
lines changed

Zend/zend_namespaces.c

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,51 +33,39 @@ static zend_class_entry *create_namespace(zend_string *interned_name) {
3333
ns->type = ZEND_NAMESPACE_CLASS;
3434
ns->ce_flags |= ZEND_ACC_UNINSTANTIABLE;
3535

36-
ns->name = interned_name;
36+
ns->name = zend_string_copy(interned_name);
3737

3838
return ns;
3939
}
4040

4141
static zend_class_entry *insert_namespace(const zend_string *name) {
4242
zend_class_entry *ns = NULL;
4343
zend_class_entry *parent_ns = global_namespace;
44-
zend_string *part = NULL;
4544
const char *start = ZSTR_VAL(name);
4645
const char *end = start + ZSTR_LEN(name);
4746
const char *pos = start;
4847
size_t len = 0;
4948

50-
smart_str current_ns = {0};
51-
5249
while (pos <= end) {
5350
if (pos == end || *pos == '\\') {
5451
len = pos - start;
55-
part = zend_string_init(start, len, 0);
56-
57-
if (current_ns.s) {
58-
smart_str_appendc(&current_ns, '\\');
59-
}
60-
smart_str_appendl(&current_ns, ZSTR_VAL(part), ZSTR_LEN(part));
61-
smart_str_0(&current_ns);
52+
zend_string *needle = zend_string_init(ZSTR_VAL(name), len, 1);
6253

63-
zend_string *needle = zend_string_init_interned(ZSTR_VAL(current_ns.s), ZSTR_LEN(current_ns.s), 1);
6454
ns = zend_hash_find_ptr(&namespaces, needle);
6555

66-
zend_string_release(part);
6756
if (!ns) {
68-
ns = create_namespace(needle);
57+
zend_string *interned_name = zend_new_interned_string(needle);
58+
ns = create_namespace(interned_name);
6959
ns->parent = parent_ns;
70-
zend_hash_add_ptr(&namespaces, needle, ns);
60+
zend_hash_add_ptr(&namespaces, interned_name, ns);
7161
}
62+
zend_string_release(needle);
7263

7364
parent_ns = ns;
74-
start = pos + 1;
7565
}
7666
pos++;
7767
}
7868

79-
smart_str_free(&current_ns);
80-
8169
return ns;
8270
}
8371

tests/classes/.idea/deployment.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/classes/.idea/php.xml

Lines changed: 1 addition & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)