From d399abba505486a74c88ae6cd53a5fc0b7bf3680 Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Tue, 19 Jun 2007 22:10:39 +0000 Subject: [PATCH] [1.7.0] Bug resulting from tag transforms to non-allowed elements fixed git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1169 48356398-32a2-884e-a903-53898d9a118a --- NEWS | 1 + .../Strategy/RemoveForeignElements.php | 20 +++++++++++-------- .../Strategy/RemoveForeignElementsTest.php | 7 +++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 0219e8be..e3381db8 100644 --- a/NEWS +++ b/NEWS @@ -45,6 +45,7 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier honor error_reporting is used - StrictBlockquote child definition refrains from wrapping whitespace in tags now. +- Bug resulting from tag transforms to non-allowed elements fixed . Unit test for ElementDef created, ElementDef behavior modified to be more flexible . Added convenience functions for HTMLModule constructors diff --git a/library/HTMLPurifier/Strategy/RemoveForeignElements.php b/library/HTMLPurifier/Strategy/RemoveForeignElements.php index b9f6402d..4fb4a21f 100644 --- a/library/HTMLPurifier/Strategy/RemoveForeignElements.php +++ b/library/HTMLPurifier/Strategy/RemoveForeignElements.php @@ -52,6 +52,18 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy } if (!empty( $token->is_tag )) { // DEFINITION CALL + + // before any processing, try to transform the element + if ( + isset($definition->info_tag_transform[$token->name]) + ) { + // there is a transformation for this tag + // DEFINITION CALL + $token = $definition-> + info_tag_transform[$token->name]-> + transform($token, $config, $context); + } + if (isset($definition->info[$token->name])) { // leave untouched, except for a few special cases: @@ -73,14 +85,6 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy if ($token->attr['src'] === false) continue; } - } elseif ( - isset($definition->info_tag_transform[$token->name]) - ) { - // there is a transformation for this tag - // DEFINITION CALL - $token = $definition-> - info_tag_transform[$token->name]-> - transform($token, $config, $context); } elseif ($escape_invalid_tags) { // invalid tag, generate HTML and insert in $token = new HTMLPurifier_Token_Text( diff --git a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php index 5d6c03f8..7d1f2b48 100644 --- a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php +++ b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php @@ -72,6 +72,13 @@ class HTMLPurifier_Strategy_RemoveForeignElementsTest ) ); + // test transform to unallowed element + $this->assertResult( + 'Big Warning!', + 'Big Warning!', + array('HTML.Allowed' => 'div') + ); + } }