From 0b349aee18147e745f0b2be2fff3d2f8345f18c4 Mon Sep 17 00:00:00 2001 From: Alessandro Chitolina Date: Sun, 9 Jul 2017 01:59:34 +0200 Subject: [PATCH] check _controller attribute is a string before parsing it --- .../ResolveControllerNameSubscriber.php | 2 +- .../ResolveControllerNameSubscriberTest.php | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/EventListener/ResolveControllerNameSubscriber.php b/src/Symfony/Bundle/FrameworkBundle/EventListener/ResolveControllerNameSubscriber.php index b083bb7ba8..6072061dba 100644 --- a/src/Symfony/Bundle/FrameworkBundle/EventListener/ResolveControllerNameSubscriber.php +++ b/src/Symfony/Bundle/FrameworkBundle/EventListener/ResolveControllerNameSubscriber.php @@ -33,7 +33,7 @@ class ResolveControllerNameSubscriber implements EventSubscriberInterface public function onKernelRequest(GetResponseEvent $event) { $controller = $event->getRequest()->attributes->get('_controller'); - if ($controller && false === strpos($controller, '::') && 2 === substr_count($controller, ':')) { + if (is_string($controller) && false === strpos($controller, '::') && 2 === substr_count($controller, ':')) { // controller in the a:b:c notation then $event->getRequest()->attributes->set('_controller', $this->parser->parse($controller)); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/EventListener/ResolveControllerNameSubscriberTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/EventListener/ResolveControllerNameSubscriberTest.php index e5cc6d28a4..338c1ec81a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/EventListener/ResolveControllerNameSubscriberTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/EventListener/ResolveControllerNameSubscriberTest.php @@ -37,7 +37,10 @@ class ResolveControllerNameSubscriberTest extends TestCase $this->assertEquals('App\\Final\\Format::methodName', $request->attributes->get('_controller')); } - public function testSkipsOtherControllerFormats() + /** + * @dataProvider provideSkippedControllers + */ + public function testSkipsOtherControllerFormats($controller) { $parser = $this->getMockBuilder(ControllerNameParser::class)->disableOriginalConstructor()->getMock(); $parser->expects($this->never()) @@ -45,10 +48,16 @@ class ResolveControllerNameSubscriberTest extends TestCase $httpKernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock(); $request = new Request(); - $request->attributes->set('_controller', 'Other:format'); + $request->attributes->set('_controller', $controller); $subscriber = new ResolveControllerNameSubscriber($parser); $subscriber->onKernelRequest(new GetResponseEvent($httpKernel, $request, HttpKernelInterface::MASTER_REQUEST)); - $this->assertEquals('Other:format', $request->attributes->get('_controller')); + $this->assertEquals($controller, $request->attributes->get('_controller')); + } + + public function provideSkippedControllers() + { + yield array('Other:format'); + yield array(function () {}); } }