Skip to content

Commit 43a2f69

Browse files
committed
take ownership of the type
1 parent 4a85778 commit 43a2f69

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

Zend/zend_API.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2903,6 +2903,10 @@ ZEND_API void zend_type_free_interned_trees(void) {
29032903
ZEND_HASH_FOREACH_PTR(CG(type_trees), tree) {
29042904
if (tree->kind != ZEND_TYPE_SIMPLE) {
29052905
pefree(tree->compound.types, 1);
2906+
} else {
2907+
if (ZEND_TYPE_HAS_NAME(tree->simple_type)) {
2908+
zend_string_release_ex(ZEND_TYPE_NAME(tree->simple_type), 1);
2909+
}
29062910
}
29072911
pefree(tree, 1);
29082912
} ZEND_HASH_FOREACH_END();
@@ -3077,7 +3081,13 @@ ZEND_API zend_type_node *zend_type_to_interned_tree(const zend_type type) {
30773081
if (!ZEND_TYPE_HAS_LIST(type)) {
30783082
zend_type_node *node = pemalloc(sizeof(zend_type_node), 1);
30793083
node->kind = ZEND_TYPE_SIMPLE;
3080-
node->simple_type = type;
3084+
zend_type new_type = type;
3085+
if (ZEND_TYPE_HAS_NAME(type)) {
3086+
const zend_string *name = ZEND_TYPE_NAME(type);
3087+
zend_string *new_name = zend_string_init_interned(ZSTR_VAL(name), ZSTR_LEN(name), 1);
3088+
ZEND_TYPE_SET_PTR(new_type, new_name);
3089+
}
3090+
node->simple_type = new_type;
30813091
return intern_type_node(node);
30823092
}
30833093

0 commit comments

Comments
 (0)