Fixed #12183 -- Made the urlize filter insert the nofollow attribute properly when an http: URL occurs after a mailto: URL. Thanks eronen for the report.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17356 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Aymeric Augustin 2012-01-08 09:51:36 +00:00
parent d101ed2cb8
commit aa4e152296
2 changed files with 6 additions and 1 deletions

View File

@ -141,7 +141,6 @@ def urlize(text, trim_url_limit=None, nofollow=False, autoescape=False):
trim_url = lambda x, limit=trim_url_limit: limit is not None and (len(x) > limit and ('%s...' % x[:max(0, limit - 3)])) or x trim_url = lambda x, limit=trim_url_limit: limit is not None and (len(x) > limit and ('%s...' % x[:max(0, limit - 3)])) or x
safe_input = isinstance(text, SafeData) safe_input = isinstance(text, SafeData)
words = word_split_re.split(force_unicode(text)) words = word_split_re.split(force_unicode(text))
nofollow_attr = nofollow and ' rel="nofollow"' or ''
for i, word in enumerate(words): for i, word in enumerate(words):
match = None match = None
if '.' in word or '@' in word or ':' in word: if '.' in word or '@' in word or ':' in word:
@ -150,6 +149,7 @@ def urlize(text, trim_url_limit=None, nofollow=False, autoescape=False):
lead, middle, trail = match.groups() lead, middle, trail = match.groups()
# Make URL we want to point to. # Make URL we want to point to.
url = None url = None
nofollow_attr = ' rel="nofollow"' if nofollow else ''
if middle.startswith('http://') or middle.startswith('https://'): if middle.startswith('http://') or middle.startswith('https://'):
url = smart_urlquote(middle) url = smart_urlquote(middle)
elif middle.startswith('www.') or ('@' not in middle and \ elif middle.startswith('www.') or ('@' not in middle and \

View File

@ -253,6 +253,11 @@ class DefaultFiltersTests(TestCase):
u'<a href="http://en.wikipedia.org/wiki/Caf%C3%A9" rel="nofollow">' u'<a href="http://en.wikipedia.org/wiki/Caf%C3%A9" rel="nofollow">'
u'http://en.wikipedia.org/wiki/Café</a>') u'http://en.wikipedia.org/wiki/Café</a>')
# Check urlize adds nofollow properly - see #12183
self.assertEqual(urlize('foo@bar.com or www.bar.com'),
u'<a href="mailto:foo@bar.com">foo@bar.com</a> or '
u'<a href="http://www.bar.com" rel="nofollow">www.bar.com</a>')
# Check urlize handles IDN correctly - see #13704 # Check urlize handles IDN correctly - see #13704
self.assertEqual(urlize('http://c✶.ws'), self.assertEqual(urlize('http://c✶.ws'),
u'<a href="http://xn--c-lgq.ws" rel="nofollow">http://c✶.ws</a>') u'<a href="http://xn--c-lgq.ws" rel="nofollow">http://c✶.ws</a>')