8000 [Routing] Don't reorder past variable-length placeholders · symfony/symfony@7a750d4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7a750d4

Browse files
[Routing] Don't reorder past variable-length placeholders
1 parent 582165f commit 7a750d4

File tree

2 files changed

+15
-23
lines changed

2 files changed

+15
-23
lines changed

src/Symfony/Component/Routing/Matcher/Dumper/StaticPrefixCollection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private function getCommonPrefix(string $prefix, string $anotherPrefix): array
176176
break;
177177
}
178178
$subPattern = substr($prefix, $i, $j - $i);
179-
if ($prefix !== $anotherPrefix && !preg_match('/^\(\[[^\]]++\]\+\+\)$/', $subPattern) && !preg_match('{(?<!'.$subPattern.')}', '')) {
179+
if ($prefix !== $anotherPrefix && !preg_match('{(?<!'.$subPattern.')}', '')) {
180180
// sub-patterns of variable length are not considered as common prefixes because their greediness would break in-order matching
181181
break;
182182
}

src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,13 @@ public function match($rawPathinfo)
2929
$matchedPathinfo = $pathinfo;
3030
$regexList = array(
3131
0 => '{^(?'
32-
.'|/abc([^/]++)/(?'
33-
.'|1(?'
34-
.'|(*:27)'
35-
.'|0(?'
36-
.'|(*:38)'
37-
.'|0(*:46)'
38-
.')'
39-
.')'
40-
.'|2(?'
41-
.'|(*:59)'
42-
.'|0(?'
43-
.'|(*:70)'
44-
.'|0(*:78)'
45-
.')'
46-
.')'
32+
.'|/abc(?'
33+
.'|([^/]++)/1(*:24)'
34+
.'|([^/]++)/2(*:41)'
35+
.'|([^/]++)/10(*:59)'
36+
.'|([^/]++)/20(*:77)'
37+
.'|([^/]++)/100(*:96)'
38+
.'|([^/]++)/200(*:115)'
4739
.')'
4840
.')$}sD',
4941
);
@@ -53,12 +45,12 @@ public function match($rawPathinfo)
5345
switch ($m = (int) $matches['MARK']) {
5446
default:
5547
$routes = array(
56-
27 => array(array('_route' => 'r1'), array('foo'), null, null),
57-
38 => array(array('_route' => 'r10'), array('foo'), null, null),
58-
46 => array(array('_route' => 'r100'), array('foo'), null, null),
59-
59 => array(array('_route' => 'r2'), array('foo'), null, null),
60-
70 => array(array('_route' => 'r20'), array('foo'), null, null),
61-
78 => array(array('_route' => 'r200'), array('foo'), null, null),
48+
24 => array(array('_route' => 'r1'), array('foo'), null, null),
49+
41 => array(array('_route' => 'r2'), array('foo'), null, null),
50+
59 => array(array('_route' => 'r10'), array('foo'), null, null),
51+
77 => array(array('_route' => 'r20'), array('foo'), null, null),
52+
96 => array(array('_route' => 'r100'), array('foo'), null, null),
53+
115 => array(array('_route' => 'r200'), array('foo'), null, null),
6254
);
6355

6456
list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m];
@@ -84,7 +76,7 @@ public function match($rawPathinfo)
8476
return $ret;
8577
}
8678

87-
if (78 === $m) {
79+
if (115 === $m) {
8880
break;
8981
}
9082
$regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m));

0 commit comments

Comments
 (0)
0