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

Reply via email to