colder Wed Jan 14 15:53:04 2009 UTC Added files: (Branch: PHP_5_3) /php-src/ext/spl/tests observer_007.phpt
Modified files: /php-src/ext/spl spl_observer.c /php-src NEWS Log: MFH: Fix #47045 (Correctly compare splobjectstorages with ==) http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_observer.c?r1=1.2.2.6.2.3.2.14&r2=1.2.2.6.2.3.2.15&diff_format=u Index: php-src/ext/spl/spl_observer.c diff -u php-src/ext/spl/spl_observer.c:1.2.2.6.2.3.2.14 php-src/ext/spl/spl_observer.c:1.2.2.6.2.3.2.15 --- php-src/ext/spl/spl_observer.c:1.2.2.6.2.3.2.14 Wed Dec 31 11:15:44 2008 +++ php-src/ext/spl/spl_observer.c Wed Jan 14 15:53:03 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_observer.c,v 1.2.2.6.2.3.2.14 2008/12/31 11:15:44 sebastian Exp $ */ +/* $Id: spl_observer.c,v 1.2.2.6.2.3.2.15 2009/01/14 15:53:03 colder Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -169,6 +169,31 @@ } /* }}} */ +static int spl_object_storage_compare_info(spl_SplObjectStorageElement *e1, spl_SplObjectStorageElement *e2 TSRMLS_DC) /* {{{ */ +{ + zval result; + + if (compare_function(&result, e1->inf, e2->inf TSRMLS_CC) == FAILURE) { + return 1; + } + + return Z_LVAL(result); +} +/* }}} */ + +static int spl_object_storage_compare_objects(zval *o1, zval *o2 TSRMLS_DC) /* {{{ */ +{ + zend_object *zo1 = (zend_object *)zend_object_store_get_object(o1 TSRMLS_CC); + zend_object *zo2 = (zend_object *)zend_object_store_get_object(o2 TSRMLS_CC); + + if (zo1->ce != spl_ce_SplObjectStorage || zo2->ce != spl_ce_SplObjectStorage) { + return 1; + } + + return zend_hash_compare(&((spl_SplObjectStorage *)zo1)->storage, &((spl_SplObjectStorage *)zo2)->storage, (compare_func_t) spl_object_storage_compare_info, 0 TSRMLS_CC); +} +/* }}} */ + /* {{{ spl_array_object_new */ static zend_object_value spl_SplObjectStorage_new(zend_class_entry *class_type TSRMLS_DC) { @@ -910,7 +935,9 @@ REGISTER_SPL_STD_CLASS_EX(SplObjectStorage, spl_SplObjectStorage_new, spl_funcs_SplObjectStorage); memcpy(&spl_handler_SplObjectStorage, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - spl_handler_SplObjectStorage.get_debug_info = spl_object_storage_debug_info; + + spl_handler_SplObjectStorage.get_debug_info = spl_object_storage_debug_info; + spl_handler_SplObjectStorage.compare_objects = spl_object_storage_compare_objects; REGISTER_SPL_IMPLEMENTS(SplObjectStorage, Countable); REGISTER_SPL_IMPLEMENTS(SplObjectStorage, Iterator); http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.456&r2=1.2027.2.547.2.965.2.457&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.456 php-src/NEWS:1.2027.2.547.2.965.2.457 --- php-src/NEWS:1.2027.2.547.2.965.2.456 Wed Jan 14 13:57:41 2009 +++ php-src/NEWS Wed Jan 14 15:53:03 2009 @@ -41,6 +41,7 @@ - Fixed building of pdo_sqlite without sqlite3. (Scott) - Fixed bug #47050 (mysqli_poll() modifies improper variables). (Johannes) +- Fixed bug #47045 (SplObjectStorage instances compared with ==). (Etienne) - Fixed bug #46979 (use with non-compound name *has* effect). (Dmitry) - Fixed bug #46957 (The tokenizer returns deprecated values). (Felipe) - Fixed bug #46944 (UTF-8 characters outside the BMP aren't encoded correctly). http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/observer_007.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/observer_007.phpt +++ php-src/ext/spl/tests/observer_007.phpt --TEST-- SPL: SplObjectStorage comapred with == --FILE-- <?php $a = new SplObjectStorage; $b = new SplObjectStorage; var_dump($a == $b); $b[$b] = 2; var_dump($a == $b); $a[$b] = 2; var_dump($a == $b); $a[$b] = 3; var_dump($a == $b); ?> ===DONE=== <?php exit(0); ?> --EXPECTF-- bool(true) bool(false) bool(true) bool(false) ===DONE=== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php