diff options
-rw-r--r-- | ext/standard/array.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 844b1f4ea3..f6784cfe86 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1015,11 +1015,18 @@ PHP_FUNCTION(array_walk) { } target_hash = HASH_OF(*array); if (!target_hash) { - php_error(E_WARNING, "Wrong datatype in array_walk() call"); + php_error(E_WARNING, "Wrong datatype in %s() call", + get_active_function_name()); + BG(array_walk_func_name) = old_walk_func_name; + RETURN_FALSE; + } + if (Z_TYPE_PP(BG(array_walk_func_name)) != IS_ARRAY && + Z_TYPE_PP(BG(array_walk_func_name)) != IS_STRING) { + php_error(E_WARNING, "Wrong syntax for function name in %s() call", + get_active_function_name()); BG(array_walk_func_name) = old_walk_func_name; RETURN_FALSE; } - convert_to_string_ex(BG(array_walk_func_name)); php_array_walk(target_hash, userdata); BG(array_walk_func_name) = old_walk_func_name; RETURN_TRUE; |