From 954997920323997b2a67806cf907a486cd495ef0 Mon Sep 17 00:00:00 2001 From: Thorsten Rinne Date: Mon, 31 Mar 2025 20:09:14 +0200 Subject: [PATCH] fix: corrected possible memory issues in category order, closes #3420 --- phpmyfaq/src/phpMyFAQ/Category/Order.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/phpmyfaq/src/phpMyFAQ/Category/Order.php b/phpmyfaq/src/phpMyFAQ/Category/Order.php index a3e7dc4049..d43ec80729 100644 --- a/phpmyfaq/src/phpMyFAQ/Category/Order.php +++ b/phpmyfaq/src/phpMyFAQ/Category/Order.php @@ -124,11 +124,16 @@ public function setCategoryTree( public function getCategoryTree(array $categories, int $parentId = 0): array { $result = []; + $stack = [[$parentId, &$result]]; - foreach ($categories as $category) { - if ((int) $category['parent_id'] === $parentId) { - $children = $this->getCategoryTree($categories, $category['category_id']); - $result[$category['category_id']] = $children; + while (!empty($stack)) { + list($currentParentId, &$currentResult) = array_pop($stack); + + foreach ($categories as $category) { + if ((int) $category['parent_id'] === $currentParentId) { + $currentResult[$category['category_id']] = []; + $stack[] = [$category['category_id'], &$currentResult[$category['category_id']]]; + } } }