diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php index b6b2b09..38cb895 100644 --- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php @@ -137,12 +137,9 @@ protected function makeSubrequest(GetResponseForExceptionEvent $event, $url, $st // The routing to the 404 page should be done as GET request because it is // restricted to GET and POST requests only. Otherwise a DELETE request // would for example trigger a method not allowed exception. - $original_request_context = $this->accessUnawareRouter->getContext(); - if ($original_request_context) { - $request_context = clone $original_request_context; - $request_context->setMethod('GET'); - $this->accessUnawareRouter->setContext($request_context); - } + $request_context = clone ($this->accessUnawareRouter->getContext()); + $request_context->setMethod('GET'); + $this->accessUnawareRouter->setContext($request_context); $sub_request->attributes->add($this->accessUnawareRouter->match($url)); diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/CustomPageExceptionHtmlSubscriberTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/CustomPageExceptionHtmlSubscriberTest.php index 5d3993d..81e7cc6 100644 --- a/core/tests/Drupal/Tests/Core/EventSubscriber/CustomPageExceptionHtmlSubscriberTest.php +++ b/core/tests/Drupal/Tests/Core/EventSubscriber/CustomPageExceptionHtmlSubscriberTest.php @@ -14,6 +14,7 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Routing\RequestContext; /** * @coversDefaultClass \Drupal\Core\EventSubscriber\CustomPageExceptionHtmlSubscriber @@ -127,6 +128,12 @@ protected function tearDown() { public function testHandleWithPostRequest() { $request = Request::create('/test', 'POST', array('name' => 'druplicon', 'pass' => '12345')); + $request_context = new RequestContext(); + $request_context->fromRequest($request); + $this->accessUnawareRouter->expects($this->any()) + ->method('getContext') + ->willReturn($request_context); + $this->kernel->expects($this->once())->method('handle')->will($this->returnCallback(function (Request $request) { return new HtmlResponse($request->getMethod()); })); @@ -148,6 +155,12 @@ public function testHandleWithGetRequest() { $request = Request::create('/test', 'GET', array('name' => 'druplicon', 'pass' => '12345')); $request->attributes->set(AccessAwareRouterInterface::ACCESS_RESULT, AccessResult::forbidden()->addCacheTags(['druplicon'])); + $request_context = new RequestContext(); + $request_context->fromRequest($request); + $this->accessUnawareRouter->expects($this->any()) + ->method('getContext') + ->willReturn($request_context); + $this->kernel->expects($this->once())->method('handle')->will($this->returnCallback(function (Request $request) { return new Response($request->getMethod() . ' ' . UrlHelper::buildQuery($request->query->all())); }));