From c981ed1ca1cbb78a43a7d3ab9454d26ddc840202 Mon Sep 17 00:00:00 2001 From: Lee Rowlands <lee.rowlands@previousnext.com.au> Date: Thu, 19 Dec 2024 10:06:52 +1000 Subject: [PATCH] Issue #3491543 by mfb: symfony/http-foundation Follow up issue for isAdminPath validator --- core/lib/Drupal/Core/Routing/AccessAwareRouter.php | 10 +++++++++- core/lib/Drupal/Core/Routing/Router.php | 8 +++++++- core/tests/Drupal/Tests/Core/Routing/RouterTest.php | 4 ++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/lib/Drupal/Core/Routing/AccessAwareRouter.php b/core/lib/Drupal/Core/Routing/AccessAwareRouter.php index ba5523d7f0b3..07b143431e2f 100644 --- a/core/lib/Drupal/Core/Routing/AccessAwareRouter.php +++ b/core/lib/Drupal/Core/Routing/AccessAwareRouter.php @@ -7,8 +7,10 @@ use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Http\Exception\CacheableAccessDeniedHttpException; use Drupal\Core\Session\AccountInterface; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\RequestContext as SymfonyRequestContext; use Symfony\Component\Routing\RouterInterface; @@ -138,7 +140,13 @@ public function generate($name, $parameters = [], $referenceType = self::ABSOLUT * Thrown when access checking failed. */ public function match($pathinfo): array { - return $this->matchRequest(Request::create($pathinfo)); + try { + $request = Request::create($pathinfo); + } + catch (BadRequestException $e) { + throw new ResourceNotFoundException($e->getMessage(), $e->getCode(), $e); + } + return $this->matchRequest($request); } } diff --git a/core/lib/Drupal/Core/Routing/Router.php b/core/lib/Drupal/Core/Routing/Router.php index 369424d90815..69d308846296 100644 --- a/core/lib/Drupal/Core/Routing/Router.php +++ b/core/lib/Drupal/Core/Routing/Router.php @@ -3,6 +3,7 @@ namespace Drupal\Core\Routing; use Drupal\Core\Path\CurrentPathStack; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Exception\MethodNotAllowedException; use Symfony\Component\Routing\Exception\ResourceNotFoundException; @@ -98,7 +99,12 @@ public function addRouteEnhancer(EnhancerInterface $route_enhancer) { * {@inheritdoc} */ public function match($pathinfo): array { - $request = Request::create($pathinfo); + try { + $request = Request::create($pathinfo); + } + catch (BadRequestException $e) { + throw new ResourceNotFoundException($e->getMessage(), $e->getCode(), $e); + } return $this->matchRequest($request); } diff --git a/core/tests/Drupal/Tests/Core/Routing/RouterTest.php b/core/tests/Drupal/Tests/Core/Routing/RouterTest.php index 254cf4669313..7f354473f0a0 100644 --- a/core/tests/Drupal/Tests/Core/Routing/RouterTest.php +++ b/core/tests/Drupal/Tests/Core/Routing/RouterTest.php @@ -12,6 +12,7 @@ use Drupal\Core\Routing\UrlGeneratorInterface; use Drupal\Tests\UnitTestCase; use Prophecy\Argument; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; @@ -59,6 +60,9 @@ public function testMatchesWithDifferentFitOrder(): void { $result = $router->match('/user/login'); $this->assertEquals('user_login', $result['_route']); + + $this->expectException(ResourceNotFoundException::class); + $router->match('/user/login '); } } -- GitLab