felipe Sat, 26 Jun 2010 17:14:33 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=300765
Log: - Fixed bug #52193 (converting closure to array yields empty array) Bug: http://bugs.php.net/52193 (Open) converting closure to array yields empty array Changed paths: U php/php-src/branches/PHP_5_3/NEWS A php/php-src/branches/PHP_5_3/Zend/tests/bug52193.phpt U php/php-src/branches/PHP_5_3/Zend/zend_operators.c A php/php-src/trunk/Zend/tests/bug52193.phpt U php/php-src/trunk/Zend/zend_operators.c Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2010-06-26 16:03:39 UTC (rev 300764) +++ php/php-src/branches/PHP_5_3/NEWS 2010-06-26 17:14:33 UTC (rev 300765) @@ -2,7 +2,10 @@ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2010, PHP 5.3.3 RC2 - Implemented FR #51295 (SQLite3::busyTimeout not existing). (Mark) + - Fixed the mail.log ini setting when no filename was given. (Johannes) + +- Fixed bug #52193 (converting closure to array yields empty array). (Felipe) - Fixed bug #52183 (Reflectionfunction reports invalid number of arguments for function aliases). (Felipe) - Fixed bug #52162 (custom request header variables with numbers are removed). Added: php/php-src/branches/PHP_5_3/Zend/tests/bug52193.phpt =================================================================== --- php/php-src/branches/PHP_5_3/Zend/tests/bug52193.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/Zend/tests/bug52193.phpt 2010-06-26 17:14:33 UTC (rev 300765) @@ -0,0 +1,78 @@ +--TEST-- +Bug #52193 (converting closure to array yields empty array) +--FILE-- +<?php + +var_dump((array) 1); +var_dump((array) NULL); +var_dump((array) new stdclass); +var_dump($h = (array) function () { return 2; }); +var_dump($h[0]()); + +$i = function () use (&$h) { + return $h; +}; + +var_dump($x = (array)$i); +var_dump($y = $x[0]); +var_dump($y()); + +$items = range(1, 5); +$func = function(){ return 'just a test'; }; + +array_splice($items, 0 , 4, $func); +var_dump($items); + +?> +--EXPECTF-- +array(1) { + [0]=> + int(1) +} +array(0) { +} +array(0) { +} +array(1) { + [0]=> + object(Closure)#1 (0) { + } +} +int(2) +array(1) { + [0]=> + object(Closure)#2 (1) { + ["static"]=> + array(1) { + ["h"]=> + &array(1) { + [0]=> + object(Closure)#1 (0) { + } + } + } + } +} +object(Closure)#2 (1) { + ["static"]=> + array(1) { + ["h"]=> + &array(1) { + [0]=> + object(Closure)#1 (0) { + } + } + } +} +array(1) { + [0]=> + object(Closure)#1 (0) { + } +} +array(2) { + [0]=> + object(Closure)#3 (0) { + } + [1]=> + int(5) +} Property changes on: php/php-src/branches/PHP_5_3/Zend/tests/bug52193.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Modified: php/php-src/branches/PHP_5_3/Zend/zend_operators.c =================================================================== --- php/php-src/branches/PHP_5_3/Zend/zend_operators.c 2010-06-26 16:03:39 UTC (rev 300764) +++ php/php-src/branches/PHP_5_3/Zend/zend_operators.c 2010-06-26 17:14:33 UTC (rev 300765) @@ -30,6 +30,7 @@ #include "zend_multiply.h" #include "zend_strtod.h" #include "zend_exceptions.h" +#include "zend_closures.h" #define LONG_SIGN_MASK (1L << (8*sizeof(long)-1)) @@ -646,7 +647,14 @@ ALLOC_HASHTABLE(ht); zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0); - if (Z_OBJ_HT_P(op)->get_properties) { + if (Z_OBJCE_P(op) == zend_ce_closure) { + convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC); + if (Z_TYPE_P(op) == IS_ARRAY) { + zend_hash_destroy(ht); + FREE_HASHTABLE(ht); + return; + } + } else if (Z_OBJ_HT_P(op)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(op)->get_properties(op TSRMLS_CC); if (obj_ht) { zend_hash_copy(ht, obj_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); Added: php/php-src/trunk/Zend/tests/bug52193.phpt =================================================================== --- php/php-src/trunk/Zend/tests/bug52193.phpt (rev 0) +++ php/php-src/trunk/Zend/tests/bug52193.phpt 2010-06-26 17:14:33 UTC (rev 300765) @@ -0,0 +1,78 @@ +--TEST-- +Bug #52193 (converting closure to array yields empty array) +--FILE-- +<?php + +var_dump((array) 1); +var_dump((array) NULL); +var_dump((array) new stdclass); +var_dump($h = (array) function () { return 2; }); +var_dump($h[0]()); + +$i = function () use (&$h) { + return $h; +}; + +var_dump($x = (array)$i); +var_dump($y = $x[0]); +var_dump($y()); + +$items = range(1, 5); +$func = function(){ return 'just a test'; }; + +array_splice($items, 0 , 4, $func); +var_dump($items); + +?> +--EXPECTF-- +array(1) { + [0]=> + int(1) +} +array(0) { +} +array(0) { +} +array(1) { + [0]=> + object(Closure)#1 (0) { + } +} +int(2) +array(1) { + [0]=> + object(Closure)#2 (1) { + ["static"]=> + array(1) { + ["h"]=> + &array(1) { + [0]=> + object(Closure)#1 (0) { + } + } + } + } +} +object(Closure)#2 (1) { + ["static"]=> + array(1) { + ["h"]=> + &array(1) { + [0]=> + object(Closure)#1 (0) { + } + } + } +} +array(1) { + [0]=> + object(Closure)#1 (0) { + } +} +array(2) { + [0]=> + object(Closure)#3 (0) { + } + [1]=> + int(5) +} Property changes on: php/php-src/trunk/Zend/tests/bug52193.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Modified: php/php-src/trunk/Zend/zend_operators.c =================================================================== --- php/php-src/trunk/Zend/zend_operators.c 2010-06-26 16:03:39 UTC (rev 300764) +++ php/php-src/trunk/Zend/zend_operators.c 2010-06-26 17:14:33 UTC (rev 300765) @@ -30,6 +30,7 @@ #include "zend_multiply.h" #include "zend_strtod.h" #include "zend_exceptions.h" +#include "zend_closures.h" #define LONG_SIGN_MASK (1L << (8*sizeof(long)-1)) @@ -646,7 +647,14 @@ ALLOC_HASHTABLE(ht); zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0); - if (Z_OBJ_HT_P(op)->get_properties) { + if (Z_OBJCE_P(op) == zend_ce_closure) { + convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC); + if (Z_TYPE_P(op) == IS_ARRAY) { + zend_hash_destroy(ht); + FREE_HASHTABLE(ht); + return; + } + } else if (Z_OBJ_HT_P(op)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(op)->get_properties(op TSRMLS_CC); if (obj_ht) { zend_hash_copy(ht, obj_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php