@@ -242,17 +242,37 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
242
242
const char * space ;
243
243
const char * class_name = get_active_class_name (& space );
244
244
245
+ size_t error_len = strlen (error ), sanitized_error_len = error_len , k = 0 , n = 0 ;
246
+ char * sanitized_error = emalloc (sizeof (char ) * error_len );
247
+
248
+ while (k < error_len ) {
249
+ sanitized_error [n ] = error [k ];
250
+ if ('%' == error [k ]) {
251
+ n ++ ;
252
+ sanitized_error [n ] = '%' ;
253
+ }
254
+ k ++ ;
255
+ n ++ ;
256
+
257
+ if (n == sanitized_error_len ) {
258
+ sanitized_error_len += error_len - k ;
259
+ sanitized_error = erealloc (sanitized_error , sanitized_error_len );
260
+ }
261
+ }
262
+ sanitized_error [n ] = '\0' ;
263
+
245
264
if (severity == E_WARNING ) {
246
265
zend_internal_type_error (ZEND_ARG_USES_STRICT_TYPES (), "%s%s%s() expects parameter %d to be a valid callback, %s" ,
247
- class_name , space , get_active_function_name (), num , error );
266
+ class_name , space , get_active_function_name (), num , sanitized_error );
248
267
} else if (severity == E_ERROR ) {
249
268
zend_throw_error (zend_ce_type_error , "%s%s%s() expects parameter %d to be a valid callback, %s" ,
250
- class_name , space , get_active_function_name (), num , error );
269
+ class_name , space , get_active_function_name (), num , sanitized_error );
251
270
} else {
252
271
zend_error (severity , "%s%s%s() expects parameter %d to be a valid callback, %s" ,
253
- class_name , space , get_active_function_name (), num , error );
272
+ class_name , space , get_active_function_name (), num , sanitized_error );
254
273
}
255
274
efree (error );
275
+ efree (sanitized_error );
256
276
}
257
277
/* }}} */
258
278
@@ -2989,28 +3009,7 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca
2989
3009
} else {
2990
3010
/* We already checked for plain function before. */
2991
3011
if (error && !(check_flags & IS_CALLABLE_CHECK_SILENT )) {
2992
- size_t callable_name_len = Z_STRLEN_P (callable ), sanitized_callable_name_len = Z_STRLEN_P (callable ), k = 0 , n = 0 ;
2993
- char * callable_name = Z_STRVAL_P (callable ), * sanitized_callable_name = emalloc (sizeof (char ) * callable_name_len );
2994
-
2995
- while (k < callable_name_len ) {
2996
- sanitized_callable_name [n ] = callable_name [k ];
2997
- if ('%' == callable_name [k ]) {
2998
- n ++ ;
2999
- sanitized_callable_name [n ] = '%' ;
3000
- }
3001
- k ++ ;
3002
- n ++ ;
3003
-
3004
- if (n == sanitized_callable_name_len ) {
3005
- sanitized_callable_name_len += callable_name_len - k ;
3006
- sanitized_callable_name = erealloc (sanitized_callable_name , sanitized_callable_name_len );
3007
- }
3008
- }
3009
- sanitized_callable_name [n ] = '\0' ;
3010
-
3011
- zend_spprintf (error , 0 , "function '%s' not found or invalid function name" , sanitized_callable_name );
3012
-
3013
- efree (sanitized_callable_name );
3012
+ zend_spprintf (error , 0 , "function '%s' not found or invalid function name" , Z_STRVAL_P (callable ));
3014
3013
}
3015
3014
return 0 ;
3016
3015
}
0 commit comments