From: Moriyoshi Koizumi Date: Tue, 26 Nov 2002 22:14:11 +0000 (+0000) Subject: MFH: improved the error reporting portion of array_walk() X-Git-Tag: php-4.3.0RC2~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b71f73322a35cf6b15ed357ffb0165d76c253525;p=php MFH: improved the error reporting portion of array_walk() --- diff --git a/ext/standard/array.c b/ext/standard/array.c index e69ee1094b..66015daf47 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -980,38 +980,16 @@ 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; - - 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; - } - } + char *func_name; - 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"); - } - break; + 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; } zend_hash_move_forward_ex(target_hash, &pos);