Skip to content

Commit b018c20

Browse files
committed
handle namespaces properly
1 parent 23c5f68 commit b018c20

File tree

2 files changed

+5
-12
lines changed

2 files changed

+5
-12
lines changed

Zend/zend_namespaces.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ static zend_class_entry *global_namespace = NULL;
2828
static HashTable namespaces;
2929

3030
static zend_class_entry *create_namespace(zend_string *name) {
31-
zend_class_entry *ns = pemalloc(sizeof(zend_class_entry), 1);
32-
memset(ns, 0, sizeof(zend_class_entry));
31+
zend_class_entry *ns = pecalloc(1, sizeof(zend_class_entry), 1);
3332
zend_initialize_class_data(ns, 1);
3433
ns->type = ZEND_NAMESPACE_CLASS;
34+
ns->ce_flags |= ZEND_ACC_UNINSTANTIABLE;
3535

3636
zend_string *interned_name = zend_new_interned_string(zend_string_copy(name));
3737
ns->name = interned_name;
@@ -64,13 +64,12 @@ static zend_class_entry *insert_namespace(const zend_string *name) {
6464
zend_string *needle = zend_string_init(ZSTR_VAL(current_ns.s), ZSTR_LEN(current_ns.s), 0);
6565
ns = zend_hash_find_ptr(&namespaces, needle);
6666

67+
zend_string_release(part);
6768
if (!ns) {
6869
ns = create_namespace(needle);
6970
ns->parent = parent_ns;
70-
zend_hash_add_ptr(&namespaces, current_ns.s, ns);
71+
zend_hash_add_ptr(&namespaces, zend_string_copy(needle), ns);
7172
}
72-
73-
zend_string_release(part);
7473
zend_string_release(needle);
7574

7675
parent_ns = ns;
@@ -120,12 +119,5 @@ void zend_destroy_namespaces(void) {
120119
return;
121120
}
122121

123-
zend_class_entry *ns = NULL;
124-
ZEND_HASH_FOREACH_PTR(&namespaces, ns) {
125-
zend_string_release(ns->name);
126-
} ZEND_HASH_FOREACH_END();
127-
128122
zend_hash_destroy(&namespaces);
129-
zend_string_release(global_namespace->name);
130-
pefree(global_namespace, 1);
131123
}

Zend/zend_opcode.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ ZEND_API void destroy_zend_class(zval *zv)
436436
}
437437
break;
438438
case ZEND_INTERNAL_CLASS:
439+
case ZEND_NAMESPACE_CLASS:
439440
if (ce->doc_comment) {
440441
zend_string_release_ex(ce->doc_comment, 1);
441442
}

0 commit comments

Comments
 (0)