From 512f21c1a8255748edebac7749801a729184b86a Mon Sep 17 00:00:00 2001 From: Alma Armas Date: Mon, 17 Aug 2020 14:23:16 +0000 Subject: [PATCH] [IMPORTANT] Fix critical bug in EntityStream --- Web/Models/Repositories/Util/EntityStream.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Web/Models/Repositories/Util/EntityStream.php b/Web/Models/Repositories/Util/EntityStream.php index 46e5ff1f..214e8023 100644 --- a/Web/Models/Repositories/Util/EntityStream.php +++ b/Web/Models/Repositories/Util/EntityStream.php @@ -13,6 +13,15 @@ class EntityStream implements \IteratorAggregate $this->entityClass = "openvk\\Web\\Models\\Entities\\$class"; } + /** + * Almost shorthand for (clone $this->dbStream) + * Needed because it's used often in this class. And it's used often to prevent changing mutable dbStream. + */ + private function dbs(): \Traversable + { + return (clone $this->dbStream); + } + private function getEntity(ActiveRow $result) { return new $this->entityClass($result); @@ -28,21 +37,21 @@ class EntityStream implements \IteratorAggregate { trigger_error("Trying to use EntityStream as iterator directly. Are you sure this is what you want?", E_USER_WARNING); - return $this->stream($this->dbStream); + return $this->stream($this->dbs()); } function page(int $page, ?int $perPage = NULL): \Traversable { - return $this->stream($this->dbStream->page($page, $perPage ?? OPENVK_DEFAULT_PER_PAGE)); + return $this->stream($this->dbs()->page($page, $perPage ?? OPENVK_DEFAULT_PER_PAGE)); } function offsetLimit(int $offset = 0, ?int $limit = NULL): \Traversable { - return $this->stream($this->dbStream->limit($limit ?? OPENVK_DEFAULT_PER_PAGE, $offset)); + return $this->stream($this->dbs()->limit($limit ?? OPENVK_DEFAULT_PER_PAGE, $offset)); } function size(): int { - return sizeof(clone $this->dbStream); + return sizeof($this->dbs()); } }