acurioso Wed, 18 May 2011 04:43:21 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=311171
Log:
Commiting r311138 into the 5.3 branch - fix to SimpleXML get properties hash
Changed paths:
U php/php-src/branches/PHP_5_4/UPGRADING
U php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c
U php/php-src/branches/PHP_5_4/ext/simplexml/tests/034.phpt
U php/php-src/branches/PHP_5_4/ext/simplexml/tests/bug51615.phpt
Modified: php/php-src/branches/PHP_5_4/UPGRADING
===================================================================
--- php/php-src/branches/PHP_5_4/UPGRADING 2011-05-18 04:02:09 UTC (rev
311170)
+++ php/php-src/branches/PHP_5_4/UPGRADING 2011-05-18 04:43:21 UTC (rev
311171)
@@ -170,6 +170,10 @@
- fclose() closes streams with resource refcount > 1; it doesn't merely
decrement the resource refcount.
- socket_set_options() and socket_get_options() now support multicast options.
+- Arrays cast from SimpleXMLElement now always contain all nodes instead of
+ just the first matching node.
+- All SimpleXMLElement children are now always printed when using var_dump(),
+ var_export(), and print_r().
===================================
5. Changes made to existing methods
Modified: php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c 2011-05-18
04:02:09 UTC (rev 311170)
+++ php/php-src/branches/PHP_5_4/ext/simplexml/simplexml.c 2011-05-18
04:43:21 UTC (rev 311171)
@@ -1069,7 +1069,11 @@
xmlAttrPtr attr;
int namelen;
int test;
+ char use_iter;
+ zval *iter_data;
+ use_iter = 0;
+
sxe = php_sxe_fetch_object(object TSRMLS_CC);
if (is_debug) {
@@ -1122,6 +1126,7 @@
GET_NODE(sxe, node);
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
+
if (node && sxe->iter.type != SXE_ITER_ATTRLIST) {
if (node->type == XML_ATTRIBUTE_NODE) {
MAKE_STD_ZVAL(value);
@@ -1129,7 +1134,17 @@
zend_hash_next_index_insert(rv, &value, sizeof(zval *),
NULL);
node = NULL;
} else if (sxe->iter.type != SXE_ITER_CHILD) {
- node = node->children;
+
+ if ( !node->children || !node->parent ||
node->children->next || node->children->children || node->parent->children ==
node->parent->last ) {
+ node = node->children;
+ } else {
+ iter_data = sxe->iter.data;
+ sxe->iter.data = NULL;
+
+ node = php_sxe_reset_iterator(sxe, 0 TSRMLS_CC);
+
+ use_iter = 1;
+ }
}
while (node) {
@@ -1161,12 +1176,27 @@
_get_base_node_value(sxe, node, &value,
sxe->iter.nsprefix, sxe->iter.isprefix TSRMLS_CC);
- sxe_properties_add(rv, name, namelen, value TSRMLS_CC);
+ if ( use_iter ) {
+ zend_hash_next_index_insert(rv, &value,
sizeof(zval *), NULL);
+ } else {
+ sxe_properties_add(rv, name, namelen, value
TSRMLS_CC);
+ }
next_iter:
- node = node->next;
+ if ( use_iter ) {
+ node = php_sxe_iterator_fetch(sxe, node->next,
0 TSRMLS_CC);
+ } else {
+ node = node->next;
+ }
}
}
+ if ( use_iter ) {
+ if (sxe->iter.data) {
+ zval_ptr_dtor(&sxe->iter.data);
+ }
+ sxe->iter.data = iter_data;
+ }
+
return rv;
}
/* }}} */
Modified: php/php-src/branches/PHP_5_4/ext/simplexml/tests/034.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/simplexml/tests/034.phpt 2011-05-18
04:02:09 UTC (rev 311170)
+++ php/php-src/branches/PHP_5_4/ext/simplexml/tests/034.phpt 2011-05-18
04:43:21 UTC (rev 311171)
@@ -1,7 +1,7 @@
--TEST--
-SimpleXML: array casting bug
---XFAIL--
-Does anyone know why?
+SimpleXML: cast to array
+--FAIL--
+Length of cast array does not match expected length
--SKIPIF--
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
--FILE--
Modified: php/php-src/branches/PHP_5_4/ext/simplexml/tests/bug51615.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/simplexml/tests/bug51615.phpt
2011-05-18 04:02:09 UTC (rev 311170)
+++ php/php-src/branches/PHP_5_4/ext/simplexml/tests/bug51615.phpt
2011-05-18 04:43:21 UTC (rev 311171)
@@ -20,7 +20,7 @@
Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity,
line: 1 in %s on line %d
Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity,
line: 1 in %s on line %d
-object(SimpleXMLElement)#%d (2) {
+object(SimpleXMLElement)#%d (3) {
["@attributes"]=>
array(2) {
["title"]=>
@@ -30,6 +30,8 @@
}
[0]=>
string(1) "x"
+ [1]=>
+ string(1) "x"
}
string(0) ""
string(0) ""
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php