From 1c27cf16074a3ade38f33ba364807a19350fa097 Mon Sep 17 00:00:00 2001 From: javaDeveloperKid Date: Thu, 15 Jun 2023 16:01:24 +0200 Subject: [PATCH] [HttpKernel] make RequestPayloadValueResolver:resolve() throw on variadic argument --- .../RequestPayloadValueResolver.php | 4 ++++ .../RequestPayloadValueResolverTest.php | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php index 9ae65c7dfdbf..bbca01a6db15 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php @@ -72,6 +72,10 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable return []; } + if ($argument->isVariadic()) { + throw new \LogicException(sprintf('Mapping variadic argument "$%s" is not supported.', $argument->getName())); + } + $attribute->metadata = $argument; return [$attribute]; diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestPayloadValueResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestPayloadValueResolverTest.php index 0f6fd60b75a7..5dcae045b918 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestPayloadValueResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestPayloadValueResolverTest.php @@ -221,6 +221,22 @@ public function testRequestInputValidationPassed() $this->assertEquals([$payload], $event->getArguments()); } + public function testItThrowsOnVariadicArgument() + { + $serializer = new Serializer(); + $validator = $this->createMock(ValidatorInterface::class); + $resolver = new RequestPayloadValueResolver($serializer, $validator); + + $argument = new ArgumentMetadata('variadic', RequestPayload::class, true, false, null, false, [ + MapRequestPayload::class => new MapRequestPayload(), + ]); + $request = Request::create('/', 'POST'); + + $this->expectException(\LogicException::class); + $this->expectExceptionMessage('Mapping variadic argument "$variadic" is not supported.'); + $resolver->resolve($request, $argument); + } + /** * @dataProvider provideMatchedFormatContext */