diff options
| author | Dmitry Stogov <dmitry@php.net> | 2005-09-12 09:58:50 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2005-09-12 09:58:50 +0000 |
| commit | 9a74c68a4cb25fb83599eea609d8bf54f96d605a (patch) | |
| tree | b013dbf15d089549f2d4157cd2bb878fad8e5ea1 /ext/standard/array.c | |
| parent | 21698c12fefc21acc7b2de2c54aa2b19cfaf3678 (diff) | |
| download | php-git-9a74c68a4cb25fb83599eea609d8bf54f96d605a.tar.gz | |
Additinal fix for bug #34277 (array_filter() crashes with references and objects)
Diffstat (limited to 'ext/standard/array.c')
| -rw-r--r-- | ext/standard/array.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index f3b50b9d79..f092af4f3e 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -4117,7 +4117,7 @@ PHP_FUNCTION(array_reduce) PHP_FUNCTION(array_filter) { zval **input, **callback = NULL; - zval *array; + zval *array, *func = NULL; zval **operand; zval **args[1]; zval *retval = NULL; @@ -4137,10 +4137,13 @@ PHP_FUNCTION(array_filter) php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument should be an array"); return; } + if (callback) { + func = *callback; + } array = *input; if (ZEND_NUM_ARGS() > 1) { - if (!zend_is_callable(*callback, 0, &callback_name)) { + if (!zend_is_callable(func, 0, &callback_name)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%s', should be a valid callback", callback_name); efree(callback_name); return; @@ -4157,14 +4160,14 @@ PHP_FUNCTION(array_filter) zend_hash_get_current_data_ex(Z_ARRVAL_P(array), (void **)&operand, &pos) == SUCCESS; zend_hash_move_forward_ex(Z_ARRVAL_P(array), &pos)) { - if (callback) { + if (func) { zend_fcall_info fci; args[0] = operand; fci.size = sizeof(fci); fci.function_table = EG(function_table); - fci.function_name = *callback; + fci.function_name = func; fci.symbol_table = NULL; fci.object_pp = NULL; fci.retval_ptr_ptr = &retval; |
