diff --git a/django/utils/html.py b/django/utils/html.py index cc8372906b..9816b9accb 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -18,7 +18,7 @@ from django.utils.text import normalize_newlines # Configuration for urlize() function. TRAILING_PUNCTUATION = ['.', ',', ':', ';', '.)'] -WRAPPING_PUNCTUATION = [('(', ')'), ('<', '>'), ('<', '>')] +WRAPPING_PUNCTUATION = [('(', ')'), ('<', '>'), ('[', ']'), ('<', '>')] # List of possible strings used for bullets in bulleted lists. DOTS = ['·', '*', '\u2022', '•', '•', '•'] diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index d00203e304..52268da2ec 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -304,7 +304,12 @@ class DefaultFiltersTests(TestCase): # Check urlize trims trailing period when followed by parenthesis - see #18644 self.assertEqual(urlize('(Go to http://www.example.com/foo.)'), - '(Go to http://www.example.com/foo.)') + '(Go to http://www.example.com/foo.)') + + # Check urlize doesn't crash when square bracket is appended to url (#19070) + self.assertEqual(urlize('[see www.example.com]'), + '[see www.example.com]' ) + def test_wordcount(self): self.assertEqual(wordcount(''), 0)