(Nikita)
. Fixed bug #79828 (Segfault when trying to access non-existing variable).
(Nikita)
+ . Fixed bug #79852 (count(DOMNodeList) doesn't match
+ count(IteratorIterator(DOMNodeList))). (Nikita)
09 Jul 2020, PHP 8.0.0alpha2
zend_internal_iterator *intern =
(zend_internal_iterator *) zend_internal_iterator_create(zend_ce_internal_iterator);
intern->iter = iter;
+ intern->iter->index = 0;
ZVAL_OBJ(return_value, &intern->std);
return SUCCESS;
}
RETURN_THROWS();
}
- intern->iter->funcs->move_forward(intern->iter);
+ /* Advance index first to match foreach behavior. */
intern->iter->index++;
+ intern->iter->funcs->move_forward(intern->iter);
}
ZEND_METHOD(InternalIterator, valid) {
--- /dev/null
+--TEST--
+Bug #79852: count(DOMNodeList) doesn't match count(IteratorIterator(DOMNodeList))
+--FILE--
+<?php
+
+$XML = <<< XML
+<root>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+</root>
+XML;
+
+$dom = new DomDocument();
+$dom->loadXml($XML);
+$items = $dom->getElementsByTagName('item');
+
+echo "Count: ".count($items)."\n";
+echo "Count: ".iterator_count($items->getIterator())."\n";
+$it = new IteratorIterator($items);
+echo "Count: ".iterator_count($it)."\n";
+echo "Count: ".iterator_count($it)."\n";
+
+?>
+--EXPECTF--
+Count: 3
+Count: 3
+Count: 3
+
+Fatal error: Uncaught Error: Iterator does not support rewinding in %s:%d
+Stack trace:
+#0 [internal function]: InternalIterator->rewind()
+#1 [internal function]: IteratorIterator->rewind()
+#2 %s(%d): iterator_count(Object(IteratorIterator))
+#3 {main}
+ thrown in %s on line %d