summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/array.c11
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;