summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2011-04-28 14:08:53 +0000
committerLuke Plant <L.Plant.98@cantab.net>2011-04-28 14:08:53 +0000
commitcf11e3789b6643cf451d79d675a97c4de94542b0 (patch)
treea1b7c10559f18a1daef2a6d63b75d98c5821d274
parent2ac4f175ec7ec5f6122d079e7f1dbac4800e7657 (diff)
Fixed #7267 - UnicodeDecodeError in clean_html
Thanks to Nikolay for the report, and gav and aaugustin for the patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16118 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/utils/html.py8
-rw-r--r--tests/regressiontests/utils/html.py12
2 files changed, 16 insertions, 4 deletions
diff --git a/django/utils/html.py b/django/utils/html.py
index 094bc6660d..7fda015840 100644
--- a/django/utils/html.py
+++ b/django/utils/html.py
@@ -13,7 +13,7 @@ LEADING_PUNCTUATION = ['(', '<', '&lt;']
TRAILING_PUNCTUATION = ['.', ',', ')', '>', '\n', '&gt;']
# List of possible strings used for bullets in bulleted lists.
-DOTS = ['&middot;', '*', '\xe2\x80\xa2', '&#149;', '&bull;', '&#8226;']
+DOTS = [u'&middot;', u'*', u'\u2022', u'&#149;', u'&bull;', u'&#8226;']
unencoded_ampersands_re = re.compile(r'&(?!(\w+|#\d+);)')
word_split_re = re.compile(r'(\s+)')
@@ -180,13 +180,13 @@ def clean_html(text):
text = html_gunk_re.sub('', text)
# Convert hard-coded bullets into HTML unordered lists.
def replace_p_tags(match):
- s = match.group().replace('</p>', '</li>')
+ s = match.group().replace(u'</p>', u'</li>')
for d in DOTS:
- s = s.replace('<p>%s' % d, '<li>')
+ s = s.replace(u'<p>%s' % d, u'<li>')
return u'<ul>\n%s\n</ul>' % s
text = hard_coded_bullets_re.sub(replace_p_tags, text)
# Remove stuff like "<p>&nbsp;&nbsp;</p>", but only if it's at the bottom
# of the text.
- text = trailing_empty_content_re.sub('', text)
+ text = trailing_empty_content_re.sub(u'', text)
return text
clean_html = allow_lazy(clean_html, unicode)
diff --git a/tests/regressiontests/utils/html.py b/tests/regressiontests/utils/html.py
index 3acb218cd1..d8b9bde8bf 100644
--- a/tests/regressiontests/utils/html.py
+++ b/tests/regressiontests/utils/html.py
@@ -121,3 +121,15 @@ class TestUtilsHtml(unittest.TestCase):
)
for value, output in items:
self.check_output(f, value, output)
+
+ def test_clean_html(self):
+ f = html.clean_html
+ items = (
+ (u'<p>I <i>believe</i> in <b>semantic markup</b>!</p>', u'<p>I <em>believe</em> in <strong>semantic markup</strong>!</p>'),
+ (u'I escape & I don\'t <a href="#" target="_blank">target</a>', u'I escape &amp; I don\'t <a href="#" >target</a>'),
+ (u'<p>I kill whitespace</p><br clear="all"><p>&nbsp;</p>', u'<p>I kill whitespace</p>'),
+ # also a regression test for #7267: this used to raise an UnicodeDecodeError
+ (u'<p>* foo</p><p>* bar</p>', u'<ul>\n<li> foo</li><li> bar</li>\n</ul>'),
+ )
+ for value, output in items:
+ self.check_output(f, value, output)