summaryrefslogtreecommitdiff
path: root/ext/reflection/php_reflection.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-11-04 11:04:11 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-11-04 11:04:11 +0100
commit7f9e7399d3b369500bc02b49b03e11960980e2ac (patch)
treeb8002345a9741b9c4be93974bf69a27cedbc4bcd /ext/reflection/php_reflection.c
parent7d96dcac2c6ce177a88ac9f15849cb499bf446bb (diff)
parentc9abfaec6bf61bcef6d9651827b49cc7789018fd (diff)
downloadphp-git-7f9e7399d3b369500bc02b49b03e11960980e2ac.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fixed bug #78774
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r--ext/reflection/php_reflection.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index c318dae5ae..7505cd99e4 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -223,8 +223,14 @@ static void reflection_free_objects_storage(zend_object *object) /* {{{ */
efree(intern->ptr);
break;
case REF_TYPE_TYPE:
- efree(intern->ptr);
+ {
+ type_reference *type_ref = intern->ptr;
+ if (ZEND_TYPE_IS_NAME(type_ref->type)) {
+ zend_string_release(ZEND_TYPE_NAME(type_ref->type));
+ }
+ efree(type_ref);
break;
+ }
case REF_TYPE_FUNCTION:
_free_function(intern->ptr);
break;
@@ -1137,6 +1143,12 @@ static void reflection_type_factory(zend_type type, zval *object)
reference->type = type;
intern->ptr = reference;
intern->ref_type = REF_TYPE_TYPE;
+
+ /* Property types may be resolved during the lifetime of the ReflectionType,
+ * so we need to make sure that the strings we reference are not released. */
+ if (ZEND_TYPE_IS_NAME(type)) {
+ zend_string_addref(ZEND_TYPE_NAME(type));
+ }
}
/* }}} */