diff --git a/library/HTMLPurifier/Strategy/RemoveForeignElements.php b/library/HTMLPurifier/Strategy/RemoveForeignElements.php index 69976b27..ac77dd29 100644 --- a/library/HTMLPurifier/Strategy/RemoveForeignElements.php +++ b/library/HTMLPurifier/Strategy/RemoveForeignElements.php @@ -33,7 +33,7 @@ class HTMLPurifier_Strategy_RemoveForeignElements extends HTMLPurifier_Strategy // DEFINITION CALL $token = $definition-> info_tag_transform[$token->name]-> - transform($token); + transform($token, $config, $context); } elseif ($escape_invalid_tags) { // invalid tag, generate HTML and insert in $token = new HTMLPurifier_Token_Text( diff --git a/library/HTMLPurifier/TagTransform.php b/library/HTMLPurifier/TagTransform.php index d923394a..ebb59d20 100644 --- a/library/HTMLPurifier/TagTransform.php +++ b/library/HTMLPurifier/TagTransform.php @@ -17,8 +17,10 @@ class HTMLPurifier_TagTransform /** * Transforms the obsolete tag into the valid tag. * @param $tag Tag to be transformed. + * @param $config Mandatory HTMLPurifier_Config object + * @param $context Mandatory HTMLPurifier_Context object */ - function transform($tag) { + function transform($tag, $config, &$context) { trigger_error('Call to abstract function', E_USER_ERROR); } @@ -37,7 +39,7 @@ class HTMLPurifier_TagTransform_Simple extends HTMLPurifier_TagTransform $this->transform_to = $transform_to; } - function transform($tag) { + function transform($tag, $config, &$context) { $new_tag = $tag->copy(); $new_tag->name = $this->transform_to; return $new_tag; @@ -55,7 +57,7 @@ class HTMLPurifier_TagTransform_Center extends HTMLPurifier_TagTransform { var $transform_to = 'div'; - function transform($tag) { + function transform($tag, $config, &$context) { if ($tag->type == 'end') { $new_tag = new HTMLPurifier_Token_End($this->transform_to); return $new_tag; @@ -106,7 +108,7 @@ class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform '+4' => '300%' ); - function transform($tag) { + function transform($tag, $config, &$context) { if ($tag->type == 'end') { $new_tag = new HTMLPurifier_Token_End($this->transform_to); diff --git a/tests/HTMLPurifier/TagTransformTest.php b/tests/HTMLPurifier/TagTransformTest.php index db82ff14..f2cd18a3 100644 --- a/tests/HTMLPurifier/TagTransformTest.php +++ b/tests/HTMLPurifier/TagTransformTest.php @@ -5,44 +5,83 @@ require_once 'HTMLPurifier/TagTransform.php'; class HTMLPurifier_TagTransformTest extends UnitTestCase { + /** + * Asserts that a transformation happens + * + * This assertion performs several tests on the transform: + * + * -# Transforms a start tag with only $name and no attributes + * -# Transforms a start tag with $name and $attributes + * -# Transform an end tag + * -# Transform an empty tag with only $name and no attributes + * -# Transform an empty tag with $name and $attributes + * + * In its current form, it assumes that start and empty tags would be + * treated the same, and is really ensuring that the tag transform doesn't + * do anything wonky to the tag type. + * + * @param $transformer HTMLPurifier_TagTransform class to test + * @param $name Name of the original tag + * @param $attributes Attributes of the original tag + * @param $expect_name Name of output tag + * @param $expect_attributes Attributes of output tag when $attributes + * is included. + * @param $expect_added_attributes Attributes of output tag when $attributes + * are omitted. + * @param $config_array Configuration array for HTMLPurifier_Config + * @param $context_array Context array for HTMLPurifier_Context + */ function assertTransformation($transformer, $name, $attributes, $expect_name, $expect_attributes, - $expect_added_attributes = array()) { + $expect_added_attributes = array(), + $config_array = array(), $context_array = array()) { + $config = HTMLPurifier_Config::createDefault(); + $config->loadArray($config_array); + + $context = new HTMLPurifier_Context(); + $context->loadArray($context_array); // start tag transform $this->assertEqual( new HTMLPurifier_Token_Start($expect_name, $expect_added_attributes), $transformer->transform( - new HTMLPurifier_Token_Start($name)) + new HTMLPurifier_Token_Start($name), $config, $context) ); // start tag transform with attributes $this->assertEqual( new HTMLPurifier_Token_Start($expect_name, $expect_attributes), $transformer->transform( - new HTMLPurifier_Token_Start($name, $attributes) + new HTMLPurifier_Token_Start($name, $attributes), + $config, $context ) ); // end tag transform $this->assertEqual( new HTMLPurifier_Token_End($expect_name), - $transformer->transform(new HTMLPurifier_Token_End($name)) + $transformer->transform( + new HTMLPurifier_Token_End($name), $config, $context + ) ); // empty tag transform $this->assertEqual( new HTMLPurifier_Token_Empty($expect_name, $expect_added_attributes), - $transformer->transform(new HTMLPurifier_Token_Empty($name)) + $transformer->transform( + new HTMLPurifier_Token_Empty($name), $config, $context + ) ); // empty tag transform with attributes $this->assertEqual( new HTMLPurifier_Token_Empty($expect_name, $expect_attributes), $transformer->transform( - new HTMLPurifier_Token_Empty($name, $attributes)) + new HTMLPurifier_Token_Empty($name, $attributes), + $config, $context + ) );