From 32e7a14b463b60348d5000f15f53a3cc8d750db3 Mon Sep 17 00:00:00 2001 From: Anja Leichsenring <aleichsenring@ab-softlab.de> Date: Thu, 17 Nov 2016 17:29:43 +0100 Subject: [PATCH] [BUGFIX] Add check for valid directory name for TCA select fileFolder If an invalid extension name is passed to a 'EXT:...' path, the GeneralUtility::getFileAbsFileName function returns an empty string. This results in a scan of '\' in the first place, and the resulting error is not helpful for finding the source of the missing icons in the TCA select box. A check for a valid directory name and an exception in case of failure will help the situation. Resolves: #78737 Releases: master, 7.6 Change-Id: I9d5159eac9b511e879144789eecb40eafcc0288c Reviewed-on: https://review.typo3.org/50699 Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> Reviewed-by: Jan Helke <typo3@helke.de> Tested-by: Jan Helke <typo3@helke.de> --- .../FormDataProvider/AbstractItemProvider.php | 11 ++++++-- .../FormDataProvider/TcaSelectItemsTest.php | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php b/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php index f9862e447df1..03b19006ef12 100644 --- a/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php +++ b/typo3/sysext/backend/Classes/Form/FormDataProvider/AbstractItemProvider.php @@ -390,6 +390,7 @@ abstract class AbstractItemProvider * @param string $fieldName Current handle field name * @param array $items Incoming items * @return array Modified item array + * @throws \RuntimeException */ protected function addItemsFromFolder(array $result, $fieldName, array $items) { @@ -399,8 +400,14 @@ abstract class AbstractItemProvider return $items; } - $fileFolder = $result['processedTca']['columns'][$fieldName]['config']['fileFolder']; - $fileFolder = GeneralUtility::getFileAbsFileName($fileFolder); + $fileFolderRaw = $result['processedTca']['columns'][$fieldName]['config']['fileFolder']; + $fileFolder = GeneralUtility::getFileAbsFileName($fileFolderRaw); + if ($fileFolder === '') { + throw new \RuntimeException( + 'Invalid folder given for item processing: ' . $fileFolderRaw . ' for table ' . $result['tableName'] . ', field ' . $fieldName, + 1479399227 + ); + } $fileFolder = rtrim($fileFolder, '/') . '/'; if (@is_dir($fileFolder)) { diff --git a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php index 668b37a10a08..a26b9f0d13fa 100644 --- a/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php +++ b/typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php @@ -1248,6 +1248,32 @@ class TcaSelectItemsTest extends UnitTestCase $this->assertSame($expectedItems, $result['processedTca']['columns']['aField']['config']['items']); } + /** + * @test + */ + public function addDataThrowsExceptionForInvalidFileFolder() + { + $input = [ + 'tableName' => 'aTable', + 'databaseRow' => [], + 'processedTca' => [ + 'columns' => [ + 'aField' => [ + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'fileFolder' => 'EXT:non_existing/Resources/Public/', + ], + ], + ], + ], + ]; + + $this->expectException(\RuntimeException::class); + $this->expectExceptionCode(1479399227); + $this->subject->addData($input); + } + /** * @test */ -- GitLab