diff options
-rw-r--r-- | Zend/tests/bug62892.phpt | 21 | ||||
-rw-r--r-- | ext/reflection/php_reflection.c | 6 |
2 files changed, 25 insertions, 2 deletions
diff --git a/Zend/tests/bug62892.phpt b/Zend/tests/bug62892.phpt new file mode 100644 index 0000000000..e6b0e60ff3 --- /dev/null +++ b/Zend/tests/bug62892.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #62892 (ReflectionClass::getTraitAliases crashes on importing trait methods as private) +--FILE-- +<?php + +trait myTrait { + public function run() {} +} + +class myClass { + use myTrait { + MyTrait::run as private; + } +} +$class = new \ReflectionClass('myClass'); +var_dump($class->getTraitAliases()); + +?> +--EXPECTF-- +array(0) { +} diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 6656f58c65..7c9981924d 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4464,8 +4464,10 @@ ZEND_METHOD(reflection_class, getTraitAliases) int method_name_len; zend_trait_method_reference *cur_ref = ce->trait_aliases[i]->trait_method; - method_name_len = spprintf(&method_name, 0, "%s::%s", cur_ref->class_name, cur_ref->method_name); - add_assoc_stringl_ex(return_value, ce->trait_aliases[i]->alias, ce->trait_aliases[i]->alias_len + 1, method_name, method_name_len, 0); + if (ce->trait_aliases[i]->alias) { + method_name_len = spprintf(&method_name, 0, "%s::%s", cur_ref->class_name, cur_ref->method_name); + add_assoc_stringl_ex(return_value, ce->trait_aliases[i]->alias, ce->trait_aliases[i]->alias_len + 1, method_name, method_name_len, 0); + } i++; } } |