From: Moriyoshi Koizumi Date: Tue, 26 Nov 2002 22:12:40 +0000 (+0000) Subject: Improved the error reporting portion of array_walk() as suggested by Markus X-Git-Tag: RELEASE_1_0b3~288 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98dace883e5c3a1643b96a9a1de722b3dc4e2eee;p=php Improved the error reporting portion of array_walk() as suggested by Markus --- diff --git a/ext/standard/array.c b/ext/standard/array.c index 0a329cea89..9c17290e3d 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -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; - - 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"); - } + 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; }