From 1f00b553735f47f7614d98968cfdf2eb2f9c0b48 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 29 Jun 2016 19:50:09 +0200 Subject: [PATCH] [HttpKernel] Move conflicting origin IPs handling to catch block --- .../Component/HttpKernel/HttpKernel.php | 10 +++------- .../HttpKernel/Tests/HttpKernelTest.php | 20 +++++++------------ 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/HttpKernel.php b/src/Symfony/Component/HttpKernel/HttpKernel.php index 2b8146127e..4e628a1409 100644 --- a/src/Symfony/Component/HttpKernel/HttpKernel.php +++ b/src/Symfony/Component/HttpKernel/HttpKernel.php @@ -63,6 +63,9 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface try { return $this->handleRaw($request, $type); } catch (\Exception $e) { + if ($e instanceof ConflictingHeadersException) { + $e = new BadRequestHttpException('The request headers contain conflicting information regarding the origin of this request.', $e); + } if (false === $catch) { $this->finishRequest($request, $type); @@ -115,13 +118,6 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface */ private function handleRaw(Request $request, $type = self::MASTER_REQUEST) { - if (self::MASTER_REQUEST === $type && $request::getTrustedProxies()) { - try { - $request->getClientIps(); - } catch (ConflictingHeadersException $e) { - throw new BadRequestHttpException('The request headers contain conflicting information regarding the origin of this request.', $e); - } - } $this->requestStack->push($request); // request diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php index 59c1d33425..372c2a3c1b 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php @@ -276,7 +276,13 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase */ public function testInconsistentClientIpsOnMasterRequests() { - $kernel = new HttpKernel(new EventDispatcher(), $this->getResolver()); + $dispatcher = new EventDispatcher(); + $dispatcher->addListener(KernelEvents::REQUEST, function ($event) { + $event->getRequest()->getClientIp(); + }); + + $kernel = new HttpKernel($dispatcher, $this->getResolver()); + $request = new Request(); $request->setTrustedProxies(array('1.1.1.1')); $request->server->set('REMOTE_ADDR', '1.1.1.1'); @@ -286,18 +292,6 @@ class HttpKernelTest extends \PHPUnit_Framework_TestCase $kernel->handle($request, $kernel::MASTER_REQUEST, false); } - public function testInconsistentClientIpsOnSubRequests() - { - $kernel = new HttpKernel(new EventDispatcher(), $this->getResolver()); - $request = new Request(); - $request->setTrustedProxies(array('1.1.1.1')); - $request->server->set('REMOTE_ADDR', '1.1.1.1'); - $request->headers->set('FORWARDED', '2.2.2.2'); - $request->headers->set('X_FORWARDED_FOR', '3.3.3.3'); - - $this->assertInstanceOf('Symfony\Component\HttpFoundation\Response', $kernel->handle($request, $kernel::SUB_REQUEST, false)); - } - protected function getResolver($controller = null) { if (null === $controller) {