servers with large sets of keys will cause memory and stack exhaustion if recursion is used
@@ -165,17 +165,21 @@ abstract class CursorBasedIterator implements Iterator
*/
public function next()
{
- if (!$this->elements && $this->fetchmore) {
- $this->fetch();
- }
-
- if ($this->elements) {
- $this->extractNext();
- } elseif ($this->cursor) {
- $this->next();
- } else {
- $this->valid = false;
+ do {
+ $more = false;
+
+ if (!$this->elements && $this->fetchmore) {
+ $this->fetch();
+ }
+ if ($this->elements) {
+ $this->extractNext();
+ } elseif ($this->cursor) {
+ $more = true;
+ } else {
+ $this->valid = false;
+ } while ($more);
}
/**