@@ -4913,9 +4913,30 @@ ZEND_METHOD(ReflectionClass, getTraitAliases)
4913
4913
zend_trait_method_reference * cur_ref = & ce -> trait_aliases [i ]-> trait_method ;
4914
4914
4915
4915
if (ce -> trait_aliases [i ]-> alias ) {
4916
+ zend_string * class_name = cur_ref -> class_name ;
4917
+
4918
+ if (!class_name ) {
4919
+ uint32_t j = 0 ;
4920
+ zval * zv ;
4921
+ zend_class_entry * trait ;
4922
+ zend_string * lcname = zend_string_tolower (cur_ref -> method_name );
4923
+
4924
+ for (j = 0 ; j < ce -> num_traits ; j ++ ) {
4925
+ zv = zend_hash_find_ex (CG (class_table ), ce -> trait_names [j ].lc_name , 1 );
4926
+ if (zv ) {
4927
+ trait = Z_CE_P (zv );
4928
+ if (zend_hash_exists (& trait -> function_table , lcname )) {
4929
+ class_name = trait -> name ;
4930
+ break ;
4931
+ }
4932
+ }
4933
+ }
4934
+ zend_string_release_ex (lcname , 0 );
4935
+ ZEND_ASSERT (class_name != NULL );
4936
+ }
4916
4937
4917
- mname = zend_string_alloc (ZSTR_LEN (cur_ref -> class_name ) + ZSTR_LEN (cur_ref -> method_name ) + 2 , 0 );
4918
- snprintf (ZSTR_VAL (mname ), ZSTR_LEN (mname ) + 1 , "%s::%s" , ZSTR_VAL (cur_ref -> class_name ), ZSTR_VAL (cur_ref -> method_name ));
4938
+ mname = zend_string_alloc (ZSTR_LEN (class_name ) + ZSTR_LEN (cur_ref -> method_name ) + 2 , 0 );
4939
+ snprintf (ZSTR_VAL (mname ), ZSTR_LEN (mname ) + 1 , "%s::%s" , ZSTR_VAL (class_name ), ZSTR_VAL (cur_ref -> method_name ));
4919
4940
add_assoc_str_ex (return_value , ZSTR_VAL (ce -> trait_aliases [i ]-> alias ), ZSTR_LEN (ce -> trait_aliases [i ]-> alias ), mname );
4920
4941
}
4921
4942
i ++ ;
0 commit comments