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') + ); + } }