@@ -3786,7 +3786,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3786
3786
overriden = va_arg (args , HashTable * * );
3787
3787
exclude_table = va_arg (args , HashTable * );
3788
3788
3789
- fnname_len = strlen ( fn -> common . function_name ) ;
3789
+ fnname_len = hash_key -> nKeyLength - 1 ;
3790
3790
3791
3791
/* apply aliases which are qualified with a class name, there should not be any ambiguity */
3792
3792
if (ce -> trait_aliases ) {
@@ -3797,7 +3797,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3797
3797
if (alias -> alias != NULL
3798
3798
&& (!alias -> trait_method -> ce || fn -> common .scope == alias -> trait_method -> ce )
3799
3799
&& alias -> trait_method -> mname_len == fnname_len
3800
- && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , fn -> common . function_name , fnname_len ) == 0 )) {
3800
+ && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , hash_key -> arKey , fnname_len ) == 0 )) {
3801
3801
fn_copy = * fn ;
3802
3802
3803
3803
/* if it is 0, no modifieres has been changed */
@@ -3819,7 +3819,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3819
3819
}
3820
3820
}
3821
3821
3822
- lcname = zend_str_tolower_dup ( fn -> common . function_name , fnname_len ) ;
3822
+ lcname = hash_key -> arKey ;
3823
3823
3824
3824
if (exclude_table == NULL || zend_hash_find (exclude_table , lcname , fnname_len , & dummy ) == FAILURE ) {
3825
3825
/* is not in hashtable, thus, function is not to be excluded */
@@ -3834,7 +3834,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3834
3834
if (alias -> alias == NULL && alias -> modifiers != 0
3835
3835
&& (!alias -> trait_method -> ce || fn -> common .scope == alias -> trait_method -> ce )
3836
3836
&& (alias -> trait_method -> mname_len == fnname_len )
3837
- && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , fn -> common . function_name , fnname_len ) == 0 )) {
3837
+ && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , lcname , fnname_len ) == 0 )) {
3838
3838
3839
3839
fn_copy .common .fn_flags = alias -> modifiers | (fn -> common .fn_flags ^ (fn -> common .fn_flags & ZEND_ACC_PPP_MASK ));
3840
3840
@@ -3851,8 +3851,6 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3851
3851
zend_add_trait_method (ce , fn -> common .function_name , lcname , fnname_len + 1 , & fn_copy , overriden TSRMLS_CC );
3852
3852
}
3853
3853
3854
- efree (lcname );
3855
-
3856
3854
return ZEND_HASH_APPLY_KEEP ;
3857
3855
}
3858
3856
/* }}} */
0 commit comments