dmitry Tue Jul 24 11:39:56 2007 UTC Added files: (Branch: PHP_5_2) /ZendEngine2/tests bug40757.phpt bug41929.phpt
Modified files: /php-src NEWS /ZendEngine2 zend_builtin_functions.c zend_object_handlers.c /ZendEngine2/tests bug27798.phpt /php-src/ext/pdo/tests pdo_018.phpt /php-src/tests/classes visibility_005.phpt Log: Fixed bug #40757 (get_object_vars get nothing in child class) Fixed bug #41929 (Foreach on object does not iterate over all visible properties)
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.850&r2=1.2027.2.547.2.851&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.850 php-src/NEWS:1.2027.2.547.2.851 --- php-src/NEWS:1.2027.2.547.2.850 Tue Jul 24 11:35:08 2007 +++ php-src/NEWS Tue Jul 24 11:39:55 2007 @@ -76,6 +76,8 @@ from class hierarchy). (robin_fernandes at uk dot ibm dot com) - Fixed bug #41947 (SimpleXML incorrectly registers empty strings as namespaces). (Rob) +- Fixed bug #41929 (Foreach on object does not iterate over all visible + properties). (Dmitry) - Fixed bug #41919 (crash in string to array conversion). (judas dot iscariote at gmail dot com, Ilia) - Fixed bug #41908 (CFLAGS="-Os" ./configure --enable-debug fails). @@ -160,6 +162,7 @@ on Windows). (Scott, Andrey) - Fixed bug #41127 (Memory leak in ldap_{first|next}_attribute functions). (Jani) +- Fixed bug #40757 (get_object_vars get nothing in child class). (Dmitry) - Fixed bug #40419 (Trailing slash in CGI request does not work). (Dmitry) - Fixed bug #39330 (apache2handler does not call shutdown actions before apache child die). (isk at ecommerce dot com, Gopal, Tony) http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_builtin_functions.c?r1=1.277.2.12.2.18&r2=1.277.2.12.2.19&diff_format=u Index: ZendEngine2/zend_builtin_functions.c diff -u ZendEngine2/zend_builtin_functions.c:1.277.2.12.2.18 ZendEngine2/zend_builtin_functions.c:1.277.2.12.2.19 --- ZendEngine2/zend_builtin_functions.c:1.277.2.12.2.18 Sat Jun 9 08:38:44 2007 +++ ZendEngine2/zend_builtin_functions.c Tue Jul 24 11:39:55 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.18 2007/06/09 08:38:44 johannes Exp $ */ +/* $Id: zend_builtin_functions.c,v 1.277.2.12.2.19 2007/07/24 11:39:55 dmitry Exp $ */ #include "zend.h" #include "zend_API.h" @@ -789,7 +789,7 @@ char *key, *prop_name, *class_name; uint key_len; ulong num_index; - int instanceof; + zend_object *zobj; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &obj) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); @@ -808,7 +808,7 @@ RETURN_FALSE; } - instanceof = EG(This) && instanceof_function(Z_OBJCE_P(EG(This)), Z_OBJCE_PP(obj) TSRMLS_CC); + zobj = zend_objects_get_address(*obj TSRMLS_CC); array_init(return_value); @@ -816,17 +816,11 @@ while (zend_hash_get_current_data_ex(properties, (void **) &value, &pos) == SUCCESS) { if (zend_hash_get_current_key_ex(properties, &key, &key_len, &num_index, 0, &pos) == HASH_KEY_IS_STRING) { - if (key[0]) { + if (zend_check_property_access(zobj, key, key_len-1 TSRMLS_CC) == SUCCESS) { + zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name); /* Not separating references */ (*value)->refcount++; - add_assoc_zval_ex(return_value, key, key_len, *value); - } else if (instanceof) { - zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name); - if (!memcmp(class_name, "*", 2) || (Z_OBJCE_P(EG(This)) == Z_OBJCE_PP(obj) && !strcmp(Z_OBJCE_P(EG(This))->name, class_name))) { - /* Not separating references */ - (*value)->refcount++; - add_assoc_zval_ex(return_value, prop_name, strlen(prop_name)+1, *value); - } + add_assoc_zval_ex(return_value, prop_name, strlen(prop_name)+1, *value); } } zend_hash_move_forward_ex(properties, &pos); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.135.2.6.2.21&r2=1.135.2.6.2.22&diff_format=u Index: ZendEngine2/zend_object_handlers.c diff -u ZendEngine2/zend_object_handlers.c:1.135.2.6.2.21 ZendEngine2/zend_object_handlers.c:1.135.2.6.2.22 --- ZendEngine2/zend_object_handlers.c:1.135.2.6.2.21 Thu Jul 12 10:32:09 2007 +++ ZendEngine2/zend_object_handlers.c Tue Jul 24 11:39:55 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.135.2.6.2.21 2007/07/12 10:32:09 dmitry Exp $ */ +/* $Id: zend_object_handlers.c,v 1.135.2.6.2.22 2007/07/24 11:39:55 dmitry Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -152,7 +152,7 @@ case ZEND_ACC_PROTECTED: return zend_check_protected(property_info->ce, EG(scope)); case ZEND_ACC_PRIVATE: - if (ce==EG(scope) && EG(scope)) { + if ((ce==EG(scope) || property_info->ce == EG(scope)) && EG(scope)) { return 1; } else { return 0; http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug27798.phpt?r1=1.1&r2=1.1.6.1&diff_format=u Index: ZendEngine2/tests/bug27798.phpt diff -u ZendEngine2/tests/bug27798.phpt:1.1 ZendEngine2/tests/bug27798.phpt:1.1.6.1 --- ZendEngine2/tests/bug27798.phpt:1.1 Mon Oct 4 08:58:47 2004 +++ ZendEngine2/tests/bug27798.phpt Tue Jul 24 11:39:55 2007 @@ -49,12 +49,12 @@ } Base::__construct array(3) { - ["Baz"]=> - int(4) ["Foo"]=> int(1) ["Bar"]=> int(2) + ["Baz"]=> + int(3) } Child::__construct array(3) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/pdo_018.phpt?r1=1.11.2.4&r2=1.11.2.4.2.1&diff_format=u Index: php-src/ext/pdo/tests/pdo_018.phpt diff -u php-src/ext/pdo/tests/pdo_018.phpt:1.11.2.4 php-src/ext/pdo/tests/pdo_018.phpt:1.11.2.4.2.1 --- php-src/ext/pdo/tests/pdo_018.phpt:1.11.2.4 Wed Oct 26 06:23:12 2005 +++ php-src/ext/pdo/tests/pdo_018.phpt Tue Jul 24 11:39:55 2007 @@ -179,9 +179,9 @@ ===INSERT=== TestBase::serialize() = 'a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}' TestDerived::serialize() -TestBase::serialize() = 'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}' +TestBase::serialize() = 'a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}' TestDerived::serialize() -TestBase::serialize() = 'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}' +TestBase::serialize() = 'a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}' ===DATA=== array(4) { [0]=> @@ -189,9 +189,9 @@ [1]=> string(91) "a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}" [2]=> - string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}" + string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}" [3]=> - string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}" + string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}" } ===FAILURE=== Exception:SQLSTATE[HY000]: General error: cannot unserialize class @@ -211,22 +211,22 @@ ["name"]=> string(11) "TestDerived" ["val"]=> - string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}" + string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}" } [2]=> array(2) { ["name"]=> NULL ["val"]=> - string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}" + string(172) "a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}" } } ===FETCHCLASS=== TestBase::unserialize(a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}) TestDerived::unserialize() -TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}) +TestBase::unserialize(a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}) TestDerived::unserialize() -TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}) +TestBase::unserialize(a:5:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}) array(3) { [0]=> object(TestBase)#%d (3) { @@ -250,7 +250,7 @@ ["DerivedPri:private"]=> string(7) "Private" ["BasePri:private"]=> - string(7) "Private" + string(8) "#Private" } [2]=> object(TestLeaf)#%d (6) { @@ -265,6 +265,6 @@ ["DerivedPri:private"]=> string(7) "Private" ["BasePri:private"]=> - string(7) "Private" + string(8) "#Private" } } http://cvs.php.net/viewvc.cgi/php-src/tests/classes/visibility_005.phpt?r1=1.1&r2=1.1.6.1&diff_format=u Index: php-src/tests/classes/visibility_005.phpt diff -u php-src/tests/classes/visibility_005.phpt:1.1 php-src/tests/classes/visibility_005.phpt:1.1.6.1 --- php-src/tests/classes/visibility_005.phpt:1.1 Fri Dec 19 10:16:08 2003 +++ php-src/tests/classes/visibility_005.phpt Tue Jul 24 11:39:56 2007 @@ -52,6 +52,7 @@ ===derived::function=== a=>1 b=>2 +c=>3 d=>4 ===derived,foreach=== a=>1 http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug40757.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/bug40757.phpt +++ ZendEngine2/tests/bug40757.phpt http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug41929.phpt?view=markup&rev=1.1 Index: ZendEngine2/tests/bug41929.phpt +++ ZendEngine2/tests/bug41929.phpt
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php