dmitry          Mon Sep 12 05:59:13 2005 EDT

  Modified files:              (Branch: PHP_5_0)
    /php-src/ext/standard       array.c 
  Log:
  Additinal fix for bug #34277 (array_filter() crashes with references and 
objects)
  
  
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.266.2.25&r2=1.266.2.26&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.266.2.25 
php-src/ext/standard/array.c:1.266.2.26
--- php-src/ext/standard/array.c:1.266.2.25     Thu Sep  1 08:01:01 2005
+++ php-src/ext/standard/array.c        Mon Sep 12 05:59:12 2005
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.266.2.25 2005/09/01 12:01:01 dmitry Exp $ */
+/* $Id: array.c,v 1.266.2.26 2005/09/12 09:59:12 dmitry Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -3975,7 +3975,7 @@
 PHP_FUNCTION(array_filter)
 {
        zval **input, **callback = NULL;
-       zval *array;
+       zval *array, *func = NULL;
        zval **operand;
        zval **args[1];
        zval *retval = NULL;
@@ -3995,10 +3995,13 @@
                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;
@@ -4015,14 +4018,14 @@
                 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;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to