Skip to content

Commit 9324010

Browse files
committed
refix bug #70895
move this code to where it belongs, no behavior change to actual throwing function, thus retaining compat with old ZPP
1 parent 8eef11d commit 9324010

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

Zend/zend_API.c

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -242,17 +242,37 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
242242
const char *space;
243243
const char *class_name = get_active_class_name(&space);
244244

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+
245264
if (severity == E_WARNING) {
246265
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);
248267
} else if (severity == E_ERROR) {
249268
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);
251270
} else {
252271
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);
254273
}
255274
efree(error);
275+
efree(sanitized_error);
256276
}
257277
/* }}} */
258278

@@ -2989,28 +3009,7 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca
29893009
} else {
29903010
/* We already checked for plain function before. */
29913011
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));
30143013
}
30153014
return 0;
30163015
}

0 commit comments

Comments
 (0)