mirror of
https://github.com/php/php-src.git
synced 2026-04-29 19:23:22 +02:00
Improved the error reporting portion of array_walk() as suggested by Markus
This commit is contained in:
+7
-29
@@ -980,37 +980,15 @@ static int php_array_walk(HashTable *target_hash, zval **userdata TSRMLS_DC)
|
||||
|
||||
zval_ptr_dtor(&retval_ptr);
|
||||
} else {
|
||||
if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_STRING) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist",
|
||||
(*BG(array_walk_func_name))->value.str.val);
|
||||
} else if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_ARRAY) {
|
||||
char *obj_name = NULL;
|
||||
zval **obj;
|
||||
zval **mt_name;
|
||||
char *func_name;
|
||||
|
||||
if (zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
|
||||
0, (void **)&obj) == SUCCESS
|
||||
&& zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
|
||||
1, (void **)&mt_name) == SUCCESS
|
||||
&& Z_TYPE_PP(mt_name) == IS_STRING) {
|
||||
switch (Z_TYPE_PP(obj)) {
|
||||
case IS_OBJECT:
|
||||
obj_name = Z_OBJ_PP(obj)->ce->name;
|
||||
break;
|
||||
|
||||
case IS_STRING:
|
||||
obj_name = Z_STRVAL_PP(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (obj_name != NULL) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s::%s() - function does not exist",
|
||||
obj_name, Z_STRVAL_PP(mt_name));
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid function name");
|
||||
}
|
||||
if (zend_is_callable(*BG(array_walk_func_name), 0, &func_name)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", func_name);
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", func_name);
|
||||
}
|
||||
|
||||
efree(func_name);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user