From e3ad2bd098fb6e090a14d93a1e9d32f5d2bfe5da Mon Sep 17 00:00:00 2001
From: Oliver Bartsch <bo@cedev.de>
Date: Fri, 22 May 2020 11:26:18 +0200
Subject: [PATCH] [TASK] Move iconFactory initialization out of loop

Resolves: #91459
Relates: #91302
Releases: master
Change-Id: Ic4af3247d7557a6c12a8d538e85795c507eab69a
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64561
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: Daniel Goerz <daniel.goerz@posteo.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de>
Reviewed-by: Daniel Goerz <daniel.goerz@posteo.de>
---
 .../Classes/Form/FormDataProvider/AbstractItemProvider.php      | 2 +-
 .../Tests/Unit/Form/FormDataProvider/TcaSelectTreeItemsTest.php | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php
index 41b232a9ba3e..d8a6a12f6dce 100644
--- a/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php
+++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php
@@ -520,6 +520,7 @@ abstract class AbstractItemProvider
         }
 
         $fileRepository = GeneralUtility::makeInstance(FileRepository::class);
+        $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
 
         while ($foreignRow = $queryResult->fetch()) {
             BackendUtility::workspaceOL($foreignTable, $foreignRow);
@@ -546,7 +547,6 @@ abstract class AbstractItemProvider
                     }
                 } else {
                     // Else, determine icon based on record type, or a generic fallback
-                    $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
                     $icon = $iconFactory->mapRecordTypeToIconIdentifier($foreignTable, $foreignRow);
                 }
                 // Add the item
diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectTreeItemsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectTreeItemsTest.php
index 6f7813438039..d0e7c5f9d699 100644
--- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectTreeItemsTest.php
+++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectTreeItemsTest.php
@@ -121,6 +121,7 @@ class TcaSelectTreeItemsTest extends UnitTestCase
 
         $iconFactoryProphecy = $this->prophesize(IconFactory::class);
         GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal());
+        GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal());
 
         $fileRepositoryProphecy = $this->prophesize(FileRepository::class);
         $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled();
@@ -191,6 +192,7 @@ class TcaSelectTreeItemsTest extends UnitTestCase
 
         $iconFactoryProphecy = $this->prophesize(IconFactory::class);
         GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal());
+        GeneralUtility::addInstance(IconFactory::class, $iconFactoryProphecy->reveal());
 
         $fileRepositoryProphecy = $this->prophesize(FileRepository::class);
         $fileRepositoryProphecy->findByRelation(Argument::cetera())->shouldNotBeCalled();
-- 
GitLab