From faa65808cc3b7b69db99cc28e0837a6c67036d15 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Sat, 29 Jan 2022 08:51:59 +0000
Subject: [PATCH] Issue #3259674 by longwave, andypost: [Symfony 6]
 Drupal\Core\Routing\Router::matchCollection(): Return value must be of type
 array, null returned

---
 core/lib/Drupal/Core/Routing/Router.php | 26 +++++++++----------------
 1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/core/lib/Drupal/Core/Routing/Router.php b/core/lib/Drupal/Core/Routing/Router.php
index 23d6ebb66fba..a49c051fa174 100644
--- a/core/lib/Drupal/Core/Routing/Router.php
+++ b/core/lib/Drupal/Core/Routing/Router.php
@@ -114,33 +114,25 @@ public function matchRequest(Request $request): array {
     $collection = $this->applyRouteFilters($collection, $request);
     $collection = $this->applyFitOrder($collection);
 
-    if ($ret = $this->matchCollection(rawurldecode($this->currentPath->getPath($request)), $collection)) {
-      return $this->applyRouteEnhancers($ret, $request);
-    }
-
-    throw 0 < count($this->allow)
-      ? new MethodNotAllowedException(array_unique($this->allow))
-      : new ResourceNotFoundException(sprintf('No routes found for "%s".', $this->currentPath->getPath()));
+    $ret = $this->matchCollection(rawurldecode($this->currentPath->getPath($request)), $collection);
+    return $this->applyRouteEnhancers($ret, $request);
   }
 
   /**
-   * Tries to match a URL with a set of routes.
-   *
-   * @param string $pathinfo
-   *   The path info to be parsed
-   * @param \Symfony\Component\Routing\RouteCollection $routes
-   *   The set of routes.
-   *
-   * @return array|null
-   *   An array of parameters. NULL when there is no match.
+   * {@inheritdoc}
    */
-  protected function matchCollection($pathinfo, RouteCollection $routes) {
+  protected function matchCollection($pathinfo, RouteCollection $routes): array {
     // Try a case-sensitive match.
     $match = $this->doMatchCollection($pathinfo, $routes, TRUE);
     // Try a case-insensitive match.
     if ($match === NULL && $routes->count() > 0) {
       $match = $this->doMatchCollection($pathinfo, $routes, FALSE);
     }
+    if ($match === NULL) {
+      throw 0 < count($this->allow)
+        ? new MethodNotAllowedException(array_unique($this->allow))
+        : new ResourceNotFoundException(sprintf('No routes found for "%s".', $this->currentPath->getPath()));
+    }
     return $match;
   }
 
-- 
GitLab