summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShipeng Feng <fsp261@gmail.com>2021-07-07 17:19:33 +0800
committerGitHub <noreply@github.com>2021-07-07 11:19:33 +0200
commit68cc04887b3c5b7ce8f28eaae5de266db99ca9a6 (patch)
tree3dc9bff8bf9ef5198ae57b4e102e5abe08295282
parentc51bf80d56cbcdbec1b243b8db086f35b4598947 (diff)
Fixed #32866 -- Fixed trimming trailing punctuation from escaped string in urlize().
-rw-r--r--django/utils/html.py5
-rw-r--r--tests/utils_tests/test_html.py4
2 files changed, 7 insertions, 2 deletions
diff --git a/django/utils/html.py b/django/utils/html.py
index 3bc02b8dd3..bd58317a79 100644
--- a/django/utils/html.py
+++ b/django/utils/html.py
@@ -283,8 +283,9 @@ def urlize(text, trim_url_limit=None, nofollow=False, autoescape=False):
middle_unescaped = html.unescape(middle)
stripped = middle_unescaped.rstrip(TRAILING_PUNCTUATION_CHARS)
if middle_unescaped != stripped:
- trail = middle[len(stripped):] + trail
- middle = middle[:len(stripped) - len(middle_unescaped)]
+ punctuation_count = len(middle_unescaped) - len(stripped)
+ trail = middle[-punctuation_count:] + trail
+ middle = middle[:-punctuation_count]
trimmed_something = True
return lead, middle, trail
diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py
index 30f5ba68e8..909620ea3f 100644
--- a/tests/utils_tests/test_html.py
+++ b/tests/utils_tests/test_html.py
@@ -251,6 +251,10 @@ class TestUtilsHtml(SimpleTestCase):
'Search for <a href="http://google.com/?q=">google.com/?q=</a>! and see.'
),
(
+ 'Search for google.com/?q=1&lt! and see.',
+ 'Search for <a href="http://google.com/?q=1%3C">google.com/?q=1&lt</a>! and see.'
+ ),
+ (
lazystr('Search for google.com/?q=!'),
'Search for <a href="http://google.com/?q=">google.com/?q=</a>!'
),