Aleksander Machniak
2013-11-28 ffec857b697ce0a23134f04cf345dc3a8b45a7ae
Fix handling of invalid closing tags in HTML messages (#1489446)
3 files modified
23 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_washtml.php 9 ●●●● patch | view | raw | blame | history
tests/Framework/Washtml.php 13 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix handling of invalid closing tags in HTML messages (#1489446)
- Set real content-type for file downloads (#1489439)
- Update TinyMCE to version 3.5.10 (#1489442)
- Fix keyboard navigation in list widgets (#1489392)
program/lib/Roundcube/rcube_washtml.php
@@ -455,7 +455,7 @@
        }
        // fix (unknown/malformed) HTML tags before "wash"
        $html = preg_replace_callback('/(<(?!\!)[\/]*)([^\s>]+)/', array($this, 'html_tag_callback'), $html);
        $html = preg_replace_callback('/(<(?!\!)[\/]*)([^\s>]+)([^>]*)/', array($this, 'html_tag_callback'), $html);
        // Remove invalid HTML comments (#1487759)
        // Don't remove valid conditional comments
@@ -479,7 +479,12 @@
            '/[^a-z0-9_\[\]\!-]/i', // forbidden characters
        ), '', $tagname);
        return $matches[1] . $tagname;
        // fix invalid closing tags - remove any attributes (#1489446)
        if ($matches[1] == '</') {
            $matches[3] = '';
        }
        return $matches[1] . $tagname . $matches[3];
    }
    /**
tests/Framework/Washtml.php
@@ -68,4 +68,17 @@
        $this->assertRegExp('|<textarea>test</textarea>|', $washed, "Self-closing textarea (#1489137)");
    }
    /**
     * Test fixing of invalid closing tags (#1489446)
     */
    function test_closing_tag_attrs()
    {
        $html = "<a href=\"http://test.com\">test</a href>";
        $washer = new rcube_washtml;
        $washed = $washer->wash($html);
        $this->assertRegExp('|</a>|', $washed, "Invalid closing tag (#1489446)");
    }
}