Opened 17 years ago
Last modified 8 years ago
#7355 closed
Urlize function in django.utils.html does not properly work on https:// links — at Initial Version
Reported by: | clint | Owned by: | nobody |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | UI/UX: |
Description
Just tested this out on the version of utils/html.py in [7569]
urlize() incorrectly adds a http:// to the beginning of a https link
To replicate:
from django.utils.html import urlize
words = "Hi there https://www.google.com"
urlize(words)
u'Hi there <a href="http://https://www.google.com">http://https://www.google.com</a>'
I did a search in trac for "urlize https" and came up with no hits. As far as I can tell this bug has been around for a while, not sure why no one would've caught this.
Patch:
===================================================================
--- html.py (revision 7569)
+++ html.py (working copy)
@@ -99,7 +99,7 @@
lead, middle, trail = match.groups()
if safe_input:
middle = mark_safe(middle)
- if middle.startswith('www.') or ('@' not in middle and not middle.startswith('http://') and \
+ if middle.startswith('www.') or ('@' not in middle and not (middle.startswith('http://') or middle.startswith('https://')) and \
len(middle) > 0 and middle[0] in string.ascii_letters + string.digits and \
(middle.endswith('.org') or middle.endswith('.net') or middle.endswith('.com'))):
middle = 'http://%s' % middle
And a test to check for this
Index: tests.py
===================================================================
--- tests.py (revision 7569)
+++ tests.py (working copy)
@@ -166,6 +166,11 @@
urlizetrunc(uri, 2)
u'<a href="http://31characteruri.com/test/" rel="nofollow">...</a>'
+# Check normal urlize
+>>> url = 'https://google.com'
+>>> urlize(url)
+u'<a href="https://google.com" rel="nofollow">https://google.com</a>'
+
wordcount()
0