From 820d6e9097614cc811db5b64e9419c0145ba568d Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Sat, 11 Jun 2011 15:52:02 +0100 Subject: [PATCH] Do not duplicate nofollow attribute in transform. Signed-off-by: Edward Z. Yang --- NEWS | 2 ++ library/HTMLPurifier/AttrTransform/Nofollow.php | 6 +++++- tests/HTMLPurifier/HTMLModule/NofollowTest.php | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 65f8dd5b..2a523bcf 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,8 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier - Color keywords are now case insensitive. Thanks Yzmir Ramirez for reporting. - Explicitly initialize anonModule variable to null. +- Do not duplicate nofollow if already present. Thanks 178 + for reporting. 4.3.0, released 2011-03-27 # Fixed broken caching of customized raw definitions, but requires an diff --git a/library/HTMLPurifier/AttrTransform/Nofollow.php b/library/HTMLPurifier/AttrTransform/Nofollow.php index 573b42c9..8143409a 100644 --- a/library/HTMLPurifier/AttrTransform/Nofollow.php +++ b/library/HTMLPurifier/AttrTransform/Nofollow.php @@ -26,7 +26,11 @@ class HTMLPurifier_AttrTransform_Nofollow extends HTMLPurifier_AttrTransform if (!is_null($url->host) && $scheme !== false && $scheme->browsable) { if (isset($attr['rel'])) { - $attr['rel'] .= ' nofollow'; + $rels = explode(' ', $attr); + if (!in_array('nofollow', $rels)) { + $rels[] = 'nofollow'; + } + $attr['rel'] = implode(' ', $rels); } else { $attr['rel'] = 'nofollow'; } diff --git a/tests/HTMLPurifier/HTMLModule/NofollowTest.php b/tests/HTMLPurifier/HTMLModule/NofollowTest.php index 5e29b764..43084de3 100644 --- a/tests/HTMLPurifier/HTMLModule/NofollowTest.php +++ b/tests/HTMLPurifier/HTMLModule/NofollowTest.php @@ -15,6 +15,12 @@ class HTMLPurifier_HTMLModule_NofollowTest extends HTMLPurifier_HTMLModuleHarnes ); } + function testNofollowDupe() { + $this->assertResult( + 'abc' + ); + } + } // vim: et sw=4 sts=4 -- 2.11.4.GIT