diff --git a/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php b/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php index 9b2f26ecd5ed769f02a9ed1151bc4bcedbc18fc8..d6e9d2a05e9c81626fd7706850055580d83da5c8 100644 --- a/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php +++ b/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php @@ -95,7 +95,7 @@ final class TreeFromLineStreamBuilder * a given source stream of lines exactly once, but creates a two-level * include node structure from it: * - * For instance, when a condition is encountered, it created a node for the + * For instance, when a condition is encountered, it creates a node for the * condition, and the "body" lines of the condition are child nodes of the * condition node. The $previousNode <-> $node juggling handles this: When * the condition body ends (new condition, or [end] or similar), the @@ -296,11 +296,16 @@ final class TreeFromLineStreamBuilder } elseif (str_contains($absoluteFileName, '*')) { // Something with * in file part $directory = rtrim(dirname($absoluteFileName) . '/'); - if (!is_dir($directory) && str_starts_with($atImportValue, './') && !$tryRelative) { + $directoryExists = is_dir($directory); + if (!$directoryExists && str_starts_with($atImportValue, './') && !$tryRelative) { // See if we can import some relative wildcard like "./Setup/*" or "./Setup/*.typoscript" $this->processAtImport($fileSuffix, $node, $atImportValueToken, $atImportLine, true); return; } + if (!$directoryExists) { + // Absolute directory. There is nothing to import if the directory does not exist. + return; + } $filePattern = basename($absoluteFileName); if (!str_contains($filePattern, '*')) { return; diff --git a/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php b/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php index 3cbe4725dde04e377ad99debf5351e391d281a4a..67efb1fbb2ce10d84f03541bf7414b679e9ab237 100644 --- a/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php +++ b/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php @@ -465,6 +465,16 @@ class TreeFromLineStreamBuilderTest extends FunctionalTestCase $expectedTree, ]; + $atImportStatement = '@import "EXT:core/Tests/Functional/TypoScript/IncludeTree/Fixtures/AtImport/NotExistingDirectory/*.typoscript"'; + $atImportLineStream = (new LosslessTokenizer())->tokenize($atImportStatement); + $expectedTree = new FileInclude(); + $expectedTree->setLineStream($atImportLineStream); + $expectedTree->setSplit(); + yield 'atImport with *.typoscript on not existing directory does not crash' => [ + $atImportLineStream, + $expectedTree, + ]; + $atImportStatement = '@import "EXT:core/Tests/Functional/TypoScript/IncludeTree/Fixtures/AtImport/AbsoluteImport/Scenario1/*.typoscript"'; $atImportLineStream = (new LosslessTokenizer())->tokenize($atImportStatement); $atImportLine = iterator_to_array($atImportLineStream->getNextLine())[0];