From 8d3078dd351e8ea16222c72083db9ff28ab33e36 Mon Sep 17 00:00:00 2001 From: Robin Chalas Date: Tue, 23 Feb 2021 23:49:04 +0100 Subject: [PATCH 1/3] [Security] #[CurrentUser] argument should resolve to null when it is anonymous --- .../Security/Http/Controller/UserValueResolver.php | 9 +++------ .../Http/Tests/Controller/UserValueResolverTest.php | 11 +++++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php index 396b430ac9..4b469edf8b 100644 --- a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php +++ b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php @@ -35,12 +35,9 @@ final class UserValueResolver implements ArgumentValueResolverInterface public function supports(Request $request, ArgumentMetadata $argument): bool { - if ($argument->getAttribute() instanceof CurrentUser) { - return true; - } - - // only security user implementations are supported - if (UserInterface::class !== $argument->getType()) { + // with the attribute, the type can be any UserInterface implementation + // otherwise, the type must be UserInterface + if (UserInterface::class !== $argument->getType() && !$argument->getAttribute() instanceof CurrentUser) { return false; } diff --git a/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php b/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php index b95aa465c3..ca3197e5e4 100644 --- a/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php @@ -83,6 +83,17 @@ class UserValueResolverTest extends TestCase $this->assertSame([$user], iterator_to_array($resolver->resolve(Request::create('/'), $metadata))); } + public function testResolveWithAttributeAndNoUser() + { + $tokenStorage = new TokenStorage(); + $tokenStorage->setToken(new UsernamePasswordToken('username', 'password', 'provider')); + + $resolver = new UserValueResolver($tokenStorage); + $metadata = new ArgumentMetadata('foo', null, false, false, null, false, new CurrentUser()); + + $this->assertFalse($resolver->supports(Request::create('/'), $metadata)); + } + public function testIntegration() { $user = $this->createMock(UserInterface::class); From 97058559cc99f1b05ef89c62a070deebea9899dc Mon Sep 17 00:00:00 2001 From: Marie Minasyan Date: Tue, 23 Feb 2021 19:21:01 +0100 Subject: [PATCH 2/3] [Translation] Make `name` attribute optional in xliff2 Do not set a fake `name` attribute on `unit` element from xliff2 to allow using `source` attribute and avoid missing translation error --- .../Component/Translation/Dumper/XliffFileDumper.php | 8 ++++---- .../Translation/Tests/Dumper/XliffFileDumperTest.php | 1 + .../Translation/Tests/fixtures/resources-2.0-clean.xlf | 6 ++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php index 72d9c6e9f3..63f30a5b64 100644 --- a/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php +++ b/src/Symfony/Component/Translation/Dumper/XliffFileDumper.php @@ -150,11 +150,11 @@ class XliffFileDumper extends FileDumper foreach ($messages->all($domain) as $source => $target) { $translation = $dom->createElement('unit'); $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, true)), 0, 7), '/+', '._')); - $name = $source; - if (\strlen($source) > 80) { - $name = substr(md5($source), -7); + + if (\strlen($source) <= 80) { + $translation->setAttribute('name', $source); } - $translation->setAttribute('name', $name); + $metadata = $messages->getMetadata($source, $domain); // Add notes section diff --git a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php index 6377132f70..cb995553b5 100644 --- a/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php +++ b/src/Symfony/Component/Translation/Tests/Dumper/XliffFileDumperTest.php @@ -43,6 +43,7 @@ class XliffFileDumperTest extends TestCase 'foo' => 'bar', 'key' => '', 'key.with.cdata' => ' & ', + 'translation.key.that.is.longer.than.eighty.characters.should.not.have.name.attribute' => 'value', ]); $catalogue->setMetadata('key', ['target-attributes' => ['order' => 1]]); diff --git a/src/Symfony/Component/Translation/Tests/fixtures/resources-2.0-clean.xlf b/src/Symfony/Component/Translation/Tests/fixtures/resources-2.0-clean.xlf index efa69b27ff..ccc5ef7a72 100644 --- a/src/Symfony/Component/Translation/Tests/fixtures/resources-2.0-clean.xlf +++ b/src/Symfony/Component/Translation/Tests/fixtures/resources-2.0-clean.xlf @@ -19,5 +19,11 @@ & ]]> + + + translation.key.that.is.longer.than.eighty.characters.should.not.have.name.attribute + value + + From b2970456bff65ca3c86d7cdfafb657726a113a2d Mon Sep 17 00:00:00 2001 From: Wouter de Jong Date: Thu, 25 Feb 2021 12:20:45 +0100 Subject: [PATCH 3/3] [TwigBridge] Install symfony/intl to run tests on Travis --- src/Symfony/Bridge/Twig/composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Bridge/Twig/composer.json b/src/Symfony/Bridge/Twig/composer.json index 72ebca58f4..6878052543 100644 --- a/src/Symfony/Bridge/Twig/composer.json +++ b/src/Symfony/Bridge/Twig/composer.json @@ -29,6 +29,7 @@ "symfony/form": "^4.4.17", "symfony/http-foundation": "^4.3|^5.0", "symfony/http-kernel": "^4.4", + "symfony/intl": "^4.4|^5.0", "symfony/mime": "^4.3|^5.0", "symfony/polyfill-intl-icu": "~1.0", "symfony/routing": "^3.4|^4.0|^5.0",