aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2025-05-15 13:57:03 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2025-05-15 13:57:14 +0200
commite4ed062d689776617b3b5be055ed256f07ada6d3 (patch)
tree407be2828423f03323d9e1f97c65c3e27dfcb04d
parent63ba61487b1d15c1bf5e991d269bab612d56283a (diff)
downloadnextcloud-server-refactor/app/remove-register-routes.tar.gz
nextcloud-server-refactor/app/remove-register-routes.zip
fix(RouteParser): bail out if method name contains hashtagrefactor/app/remove-register-routes
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
-rw-r--r--lib/private/AppFramework/Routing/RouteParser.php2
-rw-r--r--tests/lib/AppFramework/Routing/RouteParserTest.php9
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/private/AppFramework/Routing/RouteParser.php b/lib/private/AppFramework/Routing/RouteParser.php
index 6dffe7861ac..55e58234673 100644
--- a/lib/private/AppFramework/Routing/RouteParser.php
+++ b/lib/private/AppFramework/Routing/RouteParser.php
@@ -76,7 +76,7 @@ class RouteParser {
$url = $root . '/' . ltrim($route['url'], '/');
$verb = strtoupper($route['verb'] ?? 'GET');
- $split = explode('#', $name, 2);
+ $split = explode('#', $name, 3);
if (count($split) !== 2) {
throw new \UnexpectedValueException('Invalid route name: use the format foo#bar to reference FooController::bar');
}
diff --git a/tests/lib/AppFramework/Routing/RouteParserTest.php b/tests/lib/AppFramework/Routing/RouteParserTest.php
index ddfe0594ab2..406c5f1f3a5 100644
--- a/tests/lib/AppFramework/Routing/RouteParserTest.php
+++ b/tests/lib/AppFramework/Routing/RouteParserTest.php
@@ -142,6 +142,15 @@ class RouteParserTest extends \Test\TestCase {
$this->parser->parseDefaultRoutes($routes, 'app1');
}
+ public function testParseRoutesInvalidName2(): void {
+ $routes = ['routes' => [
+ ['name' => 'folders#open#action', 'url' => '/{folderId}/open', 'verb' => 'GET']
+ ]];
+
+ $this->expectException(\UnexpectedValueException::class);
+ $this->parser->parseDefaultRoutes($routes, 'app1');
+ }
+
public function testParseRoutesEmpty(): void {
$routes = ['routes' => []];