@@ -3975,7 +3975,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3975
3975
overriden = va_arg (args , HashTable * * );
3976
3976
exclude_table = va_arg (args , HashTable * );
3977
3977
3978
- fnname_len = strlen ( fn -> common . function_name ) ;
3978
+ fnname_len = hash_key -> nKeyLength - 1 ;
3979
3979
3980
3980
/* apply aliases which are qualified with a class name, there should not be any ambiguity */
3981
3981
if (ce -> trait_aliases ) {
@@ -3986,7 +3986,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
3986
3986
if (alias -> alias != NULL
3987
3987
&& (!alias -> trait_method -> ce || fn -> common .scope == alias -> trait_method -> ce )
3988
3988
&& alias -> trait_method -> mname_len == fnname_len
3989
- && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , fn -> common . function_name , fnname_len ) == 0 )) {
3989
+ && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , hash_key -> arKey , fnname_len ) == 0 )) {
3990
3990
fn_copy = * fn ;
3991
3991
3992
3992
/* if it is 0, no modifieres has been changed */
@@ -4008,7 +4008,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
4008
4008
}
4009
4009
}
4010
4010
4011
- lcname = zend_str_tolower_dup ( fn -> common . function_name , fnname_len ) ;
4011
+ lcname = hash_key -> arKey ;
4012
4012
4013
4013
if (exclude_table == NULL || zend_hash_find (exclude_table , lcname , fnname_len , & dummy ) == FAILURE ) {
4014
4014
/* is not in hashtable, thus, function is not to be excluded */
@@ -4023,7 +4023,7 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
4023
4023
if (alias -> alias == NULL && alias -> modifiers != 0
4024
4024
&& (!alias -> trait_method -> ce || fn -> common .scope == alias -> trait_method -> ce )
4025
4025
&& (alias -> trait_method -> mname_len == fnname_len )
4026
- && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , fn -> common . function_name , fnname_len ) == 0 )) {
4026
+ && (zend_binary_strcasecmp (alias -> trait_method -> method_name , alias -> trait_method -> mname_len , lcname , fnname_len ) == 0 )) {
4027
4027
4028
4028
fn_copy .common .fn_flags = alias -> modifiers | (fn -> common .fn_flags ^ (fn -> common .fn_flags & ZEND_ACC_PPP_MASK ));
4029
4029
@@ -4040,8 +4040,6 @@ static int zend_traits_copy_functions(zend_function *fn TSRMLS_DC, int num_args,
4040
4040
zend_add_trait_method (ce , fn -> common .function_name , lcname , fnname_len + 1 , & fn_copy , overriden TSRMLS_CC );
4041
4041
}
4042
4042
4043
- efree (lcname );
4044
-
4045
4043
return ZEND_HASH_APPLY_KEEP ;
4046
4044
}
4047
4045
/* }}} */
0 commit comments