rrichards Tue Aug 14 12:09:52 2007 UTC
Added files:
/php-src/ext/spl/tests bug42259.phpt
Modified files:
/php-src/ext/spl spl_sxe.c
Log:
fix bug #42259 (SimpleXMLIterator loses ancestry)
add test
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_sxe.c?r1=1.19&r2=1.20&diff_format=u
Index: php-src/ext/spl/spl_sxe.c
diff -u php-src/ext/spl/spl_sxe.c:1.19 php-src/ext/spl/spl_sxe.c:1.20
--- php-src/ext/spl/spl_sxe.c:1.19 Mon Jan 1 09:29:29 2007
+++ php-src/ext/spl/spl_sxe.c Tue Aug 14 12:09:52 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_sxe.c,v 1.19 2007/01/01 09:29:29 sebastian Exp $ */
+/* $Id: spl_sxe.c,v 1.20 2007/08/14 12:09:52 rrichards Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -142,8 +142,7 @@
if (!sxe->iter.data || sxe->iter.type == SXE_ITER_ATTRLIST) {
return; /* return NULL */
}
- return_value->type = IS_OBJECT;
- return_value->value.obj = zend_objects_store_clone_obj(sxe->iter.data
TSRMLS_CC);
+ RETURN_ZVAL(sxe->iter.data, 1, 0);
}
/* {{{ proto int SimpleXMLIterator::count() U
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/bug42259.phpt?view=markup&rev=1.1
Index: php-src/ext/spl/tests/bug42259.phpt
+++ php-src/ext/spl/tests/bug42259.phpt
--TEST--
Bug #42259 (SimpleXMLIterator loses ancestry)
--SKIPIF--
if (!extension_loaded("spl")) print "skip";
if (!extension_loaded('simplexml')) print 'skip';
if (!extension_loaded("libxml")) print "skip LibXML not present";
if (!class_exists('RecursiveIteratorIterator')) print 'skip
RecursiveIteratorIterator not available';
--FILE--
<?php
$xml =<<<EOF
<xml>
<fieldset1>
<field1/>
<field2/>
</fieldset1>
<fieldset2>
<options>
<option1/>
<option2/>
<option3/>
</options>
<field1/>
<field2/>
</fieldset2>
</xml>
EOF;
$sxe = new SimpleXMLIterator($xml);
$rit = new RecursiveIteratorIterator($sxe,
RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($rit as $child) {
$path = '';
$ancestry = $child->xpath('ancestor-or-self::*');
foreach ($ancestry as $ancestor) {
$path .= $ancestor->getName() . '/';
}
$path = substr($path, 0, strlen($path) - 1);
echo count($ancestry) . ' steps: ' . $path . PHP_EOL;
}
?>
===DONE===
--EXPECT--
3 steps: xml/fieldset1/field1
3 steps: xml/fieldset1/field2
4 steps: xml/fieldset2/options/option1
4 steps: xml/fieldset2/options/option2
4 steps: xml/fieldset2/options/option3
3 steps: xml/fieldset2/field1
3 steps: xml/fieldset2/field2
===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php