Skip to content

Commit f4fffc0

Browse files
committed
bug symfony#23238 [Security] ensure the 'route' index is set before attempting to use it (gsdevme)
This PR was submitted for the 2.8 branch but it was merged into the 2.7 branch instead (closes symfony#23238). Discussion ---------- [Security] ensure the 'route' index is set before attempting to use it | Q | A | ------------- | --- | Branch? | 2.8 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | | License | MIT | Doc PR | ``` // matching a request is more powerful than matching a URL path + context, so try that first if ($this->urlMatcher instanceof RequestMatcherInterface) { $parameters = $this->urlMatcher->matchRequest($request); } else { $parameters = $this->urlMatcher->match($request->getPathInfo()); } return $path === $parameters['_route']; ``` Hi the issue here is the code is assuming a `_route` has been returned from the `match()` method.. however there is nothing to suggest that is always the case. For example if I just want to return a controller that is perhaps not added as an actual route I can & it works.. Although this will generate a notice warning. **In terms of what happens if the `_route` is not defined should it return `false?` or actually perform a similar condition as `return $path === rawurldecode($request->getPathInfo());` ** I have an implementation of a router that is just returning a controller path and its arguments without a `_route` which works aside from this notice. Commits ------- 7ae578c fix(security): ensure the 'route' index is set before attempting to use it
2 parents f4172b0 + 7ae578c commit f4fffc0

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/Symfony/Component/Security/Http/HttpUtils.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public function checkRequestPath(Request $request, $path)
108108
$parameters = $this->urlMatcher->match($request->getPathInfo());
109109
}
110110

111-
return $path === $parameters['_route'];
111+
return isset($parameters['_route']) && $path === $parameters['_route'];
112112
} catch (MethodNotAllowedException $e) {
113113
return false;
114114
} catch (ResourceNotFoundException $e) {

src/Symfony/Component/Security/Http/Tests/HttpUtilsTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,19 @@ public function testCheckRequestPathWithUrlMatcherLoadingException()
221221
$utils->checkRequestPath($this->getRequest(), 'foobar');
222222
}
223223

224+
public function testCheckPathWithoutRouteParam()
225+
{
226+
$urlMatcher = $this->getMockBuilder('Symfony\Component\Routing\Matcher\UrlMatcherInterface')->getMock();
227+
$urlMatcher
228+
->expects($this->any())
229+
->method('match')
230+
->willReturn(array('_controller' => 'PathController'))
231+
;
232+
233+
$utils = new HttpUtils(null, $urlMatcher);
234+
$this->assertFalse($utils->checkRequestPath($this->getRequest(), 'path/index.html'));
235+
}
236+
224237
/**
225238
* @expectedException \InvalidArgumentException
226239
* @expectedExceptionMessage Matcher must either implement UrlMatcherInterface or RequestMatcherInterface

0 commit comments

Comments
 (0)