Ver Fonte

use a loop instead of recursion in CursorBasedIterator

servers with large sets of keys will cause memory and stack exhaustion if recursion is used
Gwilym Evans há 10 anos atrás
pai
commit
f05cb1b46d
1 ficheiros alterados com 15 adições e 11 exclusões
  1. 15 11
      lib/Predis/Collection/Iterator/CursorBasedIterator.php

+ 15 - 11
lib/Predis/Collection/Iterator/CursorBasedIterator.php

@@ -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);
     }
 
     /**