From 07bf252ef5c4b5c5f670f6a8bef249f86749a520 Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Tue, 14 Aug 2007 12:10:46 +0000 Subject: [PATCH] MFH: fix bug #42259 (SimpleXMLIterator loses ancestry) add test --- ext/spl/spl_sxe.c | 3 +-- ext/spl/tests/bug42259.phpt | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 ext/spl/tests/bug42259.phpt diff --git a/ext/spl/spl_sxe.c b/ext/spl/spl_sxe.c index 2d05086a9f..21b53c3ee0 100755 --- a/ext/spl/spl_sxe.c +++ b/ext/spl/spl_sxe.c @@ -142,8 +142,7 @@ SPL_METHOD(SimpleXMLIterator, getChildren) 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() diff --git a/ext/spl/tests/bug42259.phpt b/ext/spl/tests/bug42259.phpt new file mode 100644 index 0000000000..22c8bc5d61 --- /dev/null +++ b/ext/spl/tests/bug42259.phpt @@ -0,0 +1,49 @@ +--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-- + + + + + + + + + + + + + + + +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=== -- 2.40.0