From 5456ab51ecff485608d6cd48b6508500a3efa1e0 Mon Sep 17 00:00:00 2001 From: Torben Hansen <derhansen@gmail.com> Date: Fri, 29 Jan 2021 19:39:59 +0100 Subject: [PATCH] [BUGFIX] Do not try to resolve TypoScript [ELSE] condition Symfony Expression language can't resolve the TypoScript [ELSE] condition. Instead a parsing error is logged which is not helpful for users, who may believe, that [ELSE] is not supported any more. Therefore the Expression Language resolver now does not parse the [ELSE] condition any more returns false instead. Resolves: #91259 Releases: master, 10.4 Change-Id: I6701b06efe237f36aad19e8d20573c28750dab5d Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/67572 Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Stefan Froemken <froemken@gmail.com> Tested-by: Richard Haeser <richard@richardhaeser.com> Reviewed-by: Stefan Froemken <froemken@gmail.com> Reviewed-by: Richard Haeser <richard@richardhaeser.com> --- .../core/Classes/ExpressionLanguage/Resolver.php | 6 ++++++ .../Tests/Unit/ExpressionLanguage/ResolverTest.php | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/typo3/sysext/core/Classes/ExpressionLanguage/Resolver.php b/typo3/sysext/core/Classes/ExpressionLanguage/Resolver.php index 638600cad420..b7a4a881f9fe 100644 --- a/typo3/sysext/core/Classes/ExpressionLanguage/Resolver.php +++ b/typo3/sysext/core/Classes/ExpressionLanguage/Resolver.php @@ -76,6 +76,12 @@ class Resolver */ public function evaluate(string $condition): bool { + // The TypoScript [ELSE] condition is not known by the Symfony Expression Language + // and must not be evaluated. If/else logic is handled in TypoScriptParser. + if (strtoupper($condition) === 'ELSE') { + return false; + } + return (bool)$this->expressionLanguage->evaluate($condition, $this->expressionLanguageVariables); } diff --git a/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php b/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php index 63ef57a783e1..8b4032bc6bfa 100644 --- a/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php +++ b/typo3/sysext/core/Tests/Unit/ExpressionLanguage/ResolverTest.php @@ -85,6 +85,16 @@ class ResolverTest extends UnitTestCase self::assertSame($expectedResult, $expressionLanguageResolver->evaluate($expression)); } + /** + * @test + */ + public function typoScriptElseConditionIsNotEvaluatedAndAlwaysReturnsFalse() + { + $request = new ServerRequest(); + $expressionLanguageResolver = new Resolver('default', [], $request); + self::assertFalse($expressionLanguageResolver->evaluate('ELSE')); + } + /** * @return array */ -- GitLab