]> granicus.if.org Git - php/commitdiff
Fixed bug #54971 (Wrong result when using iterator_to_array with use_keys on true)
authorPierrick Charron <pierrick@php.net>
Tue, 28 Jun 2011 11:09:06 +0000 (11:09 +0000)
committerPierrick Charron <pierrick@php.net>
Tue, 28 Jun 2011 11:09:06 +0000 (11:09 +0000)
ext/spl/spl_iterators.c
ext/spl/tests/bug54971.phpt [new file with mode: 0644]

index d8ee7c525fa4bc7887e8a83d5cfed08829baaf32..e0624867315170dfa26fb6337fded26e9e9e8a84 100755 (executable)
@@ -3446,6 +3446,7 @@ PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, v
                goto done;
        }
 
+       iter->index = 0;
        if (iter->funcs->rewind) {
                iter->funcs->rewind(iter TSRMLS_CC);
                if (EG(exception)) {
@@ -3460,6 +3461,7 @@ PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, v
                if (apply_func(iter, puser TSRMLS_CC) == ZEND_HASH_APPLY_STOP || EG(exception)) {
                        goto done;
                }
+               iter->index++;
                iter->funcs->move_forward(iter TSRMLS_CC);
                if (EG(exception)) {
                        goto done;
diff --git a/ext/spl/tests/bug54971.phpt b/ext/spl/tests/bug54971.phpt
new file mode 100644 (file)
index 0000000..166613b
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Bug #54971 (Wrong result when using iterator_to_array with use_keys on true)
+--FILE--
+<?php
+
+$source = <<<XML
+<root>
+<node>val1</node>
+<node>val2</node>
+</root>
+XML;
+
+
+$doc = new DOMDocument();
+$doc->loadXML($source);
+
+$xpath = new DOMXPath($doc);
+$items = $xpath->query('//node');
+
+print_r(iterator_to_array($items, false));
+print_r(iterator_to_array($items, true));
+?>
+--EXPECT--
+Array
+(
+    [0] => DOMElement Object
+        (
+        )
+
+    [1] => DOMElement Object
+        (
+        )
+
+)
+Array
+(
+    [0] => DOMElement Object
+        (
+        )
+
+    [1] => DOMElement Object
+        (
+        )
+
+)