Issue #3489329 by mfb, casey: symfony/http-foundation commit 32310ff breaks PathValidator
(cherry picked from commit 90ab4e3da1
)
merge-requests/10501/head
parent
0aeedd16e5
commit
252448a006
|
@ -10,6 +10,7 @@ use Drupal\Core\Routing\RequestContext;
|
||||||
use Drupal\Core\Session\AccountInterface;
|
use Drupal\Core\Session\AccountInterface;
|
||||||
use Drupal\Core\Url;
|
use Drupal\Core\Url;
|
||||||
use Drupal\Core\Routing\RouteObjectInterface;
|
use Drupal\Core\Routing\RouteObjectInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
|
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
|
||||||
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
|
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
|
||||||
|
@ -118,7 +119,12 @@ class PathValidator implements PathValidatorInterface {
|
||||||
return Url::fromUri($path);
|
return Url::fromUri($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
$request = Request::create('/' . $path);
|
try {
|
||||||
|
$request = Request::create('/' . $path);
|
||||||
|
}
|
||||||
|
catch (BadRequestException) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
$attributes = $this->getPathAttributes($path, $request, $access_check);
|
$attributes = $this->getPathAttributes($path, $request, $access_check);
|
||||||
|
|
||||||
if (!$attributes) {
|
if (!$attributes) {
|
||||||
|
@ -172,6 +178,9 @@ class PathValidator implements PathValidatorInterface {
|
||||||
catch (MethodNotAllowedException $e) {
|
catch (MethodNotAllowedException $e) {
|
||||||
$result = FALSE;
|
$result = FALSE;
|
||||||
}
|
}
|
||||||
|
catch (BadRequestException) {
|
||||||
|
$result = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
$router->setContext($initial_request_context);
|
$router->setContext($initial_request_context);
|
||||||
return $result;
|
return $result;
|
||||||
|
|
|
@ -444,4 +444,20 @@ class PathValidatorTest extends UnitTestCase {
|
||||||
$this->assertEquals(['key' => 'value'], $url->getRouteParameters());
|
$this->assertEquals(['key' => 'value'], $url->getRouteParameters());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getUrlIfValidWithoutAccessCheck() method with an invalid path.
|
||||||
|
*
|
||||||
|
* @covers ::getUrlIfValidWithoutAccessCheck
|
||||||
|
* @covers ::getUrl
|
||||||
|
*/
|
||||||
|
public function testGetUrlIfValidWithoutAccessCheckWithInvalidPath(): void {
|
||||||
|
// URLs must not start nor end with ASCII control characters or spaces.
|
||||||
|
$this->assertFalse($this->pathValidator->getUrlIfValidWithoutAccessCheck('foo '));
|
||||||
|
// Also check URL-encoded variant.
|
||||||
|
$this->pathProcessor->expects($this->once())
|
||||||
|
->method('processInbound')
|
||||||
|
->willReturnArgument(0);
|
||||||
|
$this->assertFalse($this->pathValidator->getUrlIfValidWithoutAccessCheck('foo%20'));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue