From 9d62d9d3818d6acfc08a98b5e0fcaf255295f70f Mon Sep 17 00:00:00 2001 From: Daniel Hensby Date: Mon, 21 Mar 2016 15:22:00 +0000 Subject: [PATCH] FIX Link tracking not escaping `#` Fixes #1409 --- code/model/SiteTreeLinkTracking.php | 3 ++- tests/model/SiteTreeLinkTrackingTest.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/model/SiteTreeLinkTracking.php b/code/model/SiteTreeLinkTracking.php index 9e3638e1..477a6647 100644 --- a/code/model/SiteTreeLinkTracking.php +++ b/code/model/SiteTreeLinkTracking.php @@ -259,12 +259,13 @@ class SiteTreeLinkTracking_Parser { // Local anchor. $matches = array(); if(preg_match('/^#(.*)/i', $href, $matches)) { + $anchor = preg_quote($matches[1], '#'); $results[] = array( 'Type' => 'localanchor', 'Target' => null, 'Anchor' => $matches[1], 'DOMReference' => $link, - 'Broken' => !preg_match("#(name|id)=\"{$matches[1]}\"#", $htmlValue->getContent()) + 'Broken' => !preg_match("#(name|id)=\"{$anchor}\"#", $htmlValue->getContent()) ); continue; diff --git a/tests/model/SiteTreeLinkTrackingTest.php b/tests/model/SiteTreeLinkTrackingTest.php index e5967631..d73bab9a 100644 --- a/tests/model/SiteTreeLinkTrackingTest.php +++ b/tests/model/SiteTreeLinkTrackingTest.php @@ -20,6 +20,7 @@ class SiteTreeLinkTrackingTest extends SapphireTest { $this->assertFalse($this->isBroken('anchor')); $this->assertFalse($this->isBroken('anchor')); + $this->assertTrue($this->isBroken('anchor')); $page = new Page(); $page->Content = 'nameid';