summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2011-11-18 22:54:24 +0000
committerAymeric Augustin <aymeric.augustin@m4x.org>2011-11-18 22:54:24 +0000
commit40b9532668b5e4d956c7be15f721be41d3defa3e (patch)
treec0f5f7716e818f783897b281172ecfcd6d59ac87
parent6f66b551081382323d37d9894aa0af53e9d9d725 (diff)
Fixed #16753 -- Supported network-path references in the syndication framework. Thanks cato for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17108 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/syndication/views.py10
-rw-r--r--tests/regressiontests/syndication/tests.py4
2 files changed, 9 insertions, 5 deletions
diff --git a/django/contrib/syndication/views.py b/django/contrib/syndication/views.py
index a6e18e3cd8..2480ff6caa 100644
--- a/django/contrib/syndication/views.py
+++ b/django/contrib/syndication/views.py
@@ -9,15 +9,15 @@ from django.utils.html import escape
from django.utils.timezone import is_naive
def add_domain(domain, url, secure=False):
- if not (url.startswith('http://')
+ protocol = 'https' if secure else 'http'
+ if url.startswith('//'):
+ # Support network-path reference (see #16753) - RSS requires a protocol
+ url = '%s:%s' % (protocol, url)
+ elif not (url.startswith('http://')
or url.startswith('https://')
or url.startswith('mailto:')):
# 'url' must already be ASCII and URL-quoted, so no need for encoding
# conversions here.
- if secure:
- protocol = 'https'
- else:
- protocol = 'http'
url = iri_to_uri(u'%s://%s%s' % (protocol, domain, url))
return url
diff --git a/tests/regressiontests/syndication/tests.py b/tests/regressiontests/syndication/tests.py
index 14dcd0a471..95b4efb4f4 100644
--- a/tests/regressiontests/syndication/tests.py
+++ b/tests/regressiontests/syndication/tests.py
@@ -305,3 +305,7 @@ class SyndicationFeedTest(FeedTestCase):
views.add_domain('example.com', 'mailto:uhoh@djangoproject.com'),
'mailto:uhoh@djangoproject.com'
)
+ self.assertEqual(
+ views.add_domain('example.com', '//example.com/foo/?arg=value'),
+ 'http://example.com/foo/?arg=value'
+ )