[BUGFIX] Catch exceptions for invalid form configuration files 97/56797/2
authorBenni Mack <benni@typo3.org>
Wed, 25 Apr 2018 06:39:05 +0000 (08:39 +0200)
committerSusanne Moog <susanne.moog@typo3.org>
Thu, 26 Apr 2018 06:47:13 +0000 (08:47 +0200)
Resolves: #84859
Releases: master, 8.7
Change-Id: I64b14c87758178f76258bdbf747931b008d9a71c
Reviewed-on: https://review.typo3.org/56797
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Ralf Zimmermann <ralf.zimmermann@tritum.de>
Tested-by: Ralf Zimmermann <ralf.zimmermann@tritum.de>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
typo3/sysext/core/Classes/Database/SoftReferenceIndex.php
typo3/sysext/form/Classes/Hooks/SoftReferenceParserHook.php

index d1b63b4..e69a24e 100644 (file)
@@ -86,7 +86,7 @@ class SoftReferenceIndex
      * @param string $spKey The softlink parser key. This is only interesting if more than one parser is grouped in the same class. That is the case with this parser.
      * @param array $spParams Parameters of the softlink parser. Basically this is the content inside optional []-brackets after the softref keys. Parameters are exploded by ";
      * @param string $structurePath If running from inside a FlexForm structure, this is the path of the tag.
-     * @return array Result array on positive matches, see description above. Otherwise FALSE
+     * @return array|bool Result array on positive matches, see description above. Otherwise FALSE
      */
     public function findRef($table, $field, $uid, $content, $spKey, $spParams, $structurePath = '')
     {
index 5964a61..728e124 100644 (file)
@@ -39,7 +39,7 @@ class SoftReferenceParserHook extends SoftReferenceIndex
      * @param string $spKey The softlink parser key. This is only interesting if more than one parser is grouped in the same class. That is the case with this parser.
      * @param array $spParams Parameters of the softlink parser. Basically this is the content inside optional []-brackets after the softref keys. Parameters are exploded by ";
      * @param string $structurePath If running from inside a FlexForm structure, this is the path of the tag.
-     * @return array Result array on positive matches, see description above. Otherwise FALSE
+     * @return array|bool Result array on positive matches, see description above. Otherwise FALSE
      */
     public function findRef($table, $field, $uid, $content, $spKey, $spParams, $structurePath = '')
     {
@@ -47,7 +47,14 @@ class SoftReferenceParserHook extends SoftReferenceIndex
         $tokenId = $this->makeTokenID($content);
 
         $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);
-        $file = $resourceFactory->retrieveFileOrFolderObject($content);
+        try {
+            $file = $resourceFactory->retrieveFileOrFolderObject($content);
+        } catch (\Exception $e) {
+            // Top level catch to ensure useful following exception handling, because FAL throws top level exceptions.
+            // TYPO3\CMS\Core\Database\ReferenceIndex::getRelations() will check the return value of this hook with is_array()
+            // so we return false to tell getRelations() to do nothing.
+            return false;
+        }
 
         return [
             'content' => '{softref:' . $tokenId . '}',