Skip to content
Snippets Groups Projects
Commit cd7c1d49 authored by Dave Long's avatar Dave Long
Browse files

Merge branch '3486195-10.5.x' into '10.5.x'

Views UI link generation may also throw BadRequestException.

See merge request !10140
parents c5f9eea8 5ba7c336
No related branches found
No related tags found
No related merge requests found
Pipeline #335406 passed
Pipeline: drupal

#335409

    ......@@ -16,6 +16,7 @@
    use Drupal\Core\Url;
    use Drupal\views\Views;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Symfony\Component\HttpFoundation\Exception\BadRequestException;
    use Symfony\Component\HttpFoundation\RequestStack;
    use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
    use Drupal\Core\Extension\ModuleHandlerInterface;
    ......@@ -464,7 +465,7 @@ public function getDisplayDetails($view, $display) {
    if ($path && (!str_contains($path, '%'))) {
    // Wrap this in a try/catch as trying to generate links to some
    // routes may throw a NotAcceptableHttpException if they do not
    // routes may throw an exception, for example if they do not
    // respond to HTML, such as RESTExports.
    try {
    if (!parse_url($path, PHP_URL_SCHEME)) {
    ......@@ -476,7 +477,7 @@ public function getDisplayDetails($view, $display) {
    $url = Url::fromUri("base:$path");
    }
    }
    catch (NotAcceptableHttpException $e) {
    catch (BadRequestException | NotAcceptableHttpException $e) {
    $url = '/' . $path;
    }
    ......
    ......@@ -10,6 +10,7 @@
    use Drupal\Core\Link;
    use Drupal\Core\Url;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Symfony\Component\HttpFoundation\Exception\BadRequestException;
    use Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException;
    /**
    ......@@ -261,14 +262,14 @@ protected function getDisplaysList(EntityInterface $view) {
    $path = $display->getPath();
    if ($view->status() && !str_contains($path, '%')) {
    // Wrap this in a try/catch as trying to generate links to some
    // routes may throw a NotAcceptableHttpException if they do not
    // routes may throw an exception, for example if they do not
    // respond to HTML, such as RESTExports.
    try {
    // @todo Views should expect and store a leading /. See:
    // https://www.drupal.org/node/2423913
    $rendered_path = Link::fromTextAndUrl('/' . $path, Url::fromUserInput('/' . $path))->toString();
    }
    catch (NotAcceptableHttpException $e) {
    catch (BadRequestException | NotAcceptableHttpException $e) {
    $rendered_path = '/' . $path;
    }
    }
    ......
    ......@@ -183,4 +183,4 @@ display:
    display_plugin: page
    position: 2
    display_options:
    path: foobar
    path: 'foobar '
    ......@@ -37,6 +37,8 @@ public function testViewsUi(): void {
    */
    public function testNoDoubleEscaping(): void {
    $this->drupalGet('admin/structure/views');
    $this->assertSession()->pageTextContains('sa_contrib_2013_035');
    $this->assertSession()->pageTextContains('Page (/foobar )');
    $this->assertSession()->assertNoEscaped('<');
    $this->drupalGet('admin/structure/views/view/sa_contrib_2013_035');
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment