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;  | 
