From 646f2f6101cda3e20908928de44739dfff596b0f Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sat, 23 Aug 2008 17:28:12 +0000 Subject: [PATCH] Fixed #7494 -- Fixed build_absolute_url() for some types of (uncommon) URLs. Patch from tom@almostobsolete.net and RobotAdam. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8490 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/http/__init__.py | 5 ++++- tests/regressiontests/requests/tests.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/http/__init__.py b/django/http/__init__.py index bbbd1ba99a..6d24e0a23a 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -1,4 +1,5 @@ import os +import re from Cookie import SimpleCookie, CookieError from pprint import pformat from urllib import urlencode @@ -18,6 +19,8 @@ from utils import * RESERVED_CHARS="!*'();:@&=+$,/?%#[]" +absolute_http_url_re = re.compile(r"^https?://", re.I) + class Http404(Exception): pass @@ -65,7 +68,7 @@ class HttpRequest(object): """ if not location: location = self.get_full_path() - if not ':' in location: + if not absolute_http_url_re.match(location): current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http', self.get_host(), self.path) location = urljoin(current_uri, location) diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py index a091113515..1615a73406 100644 --- a/tests/regressiontests/requests/tests.py +++ b/tests/regressiontests/requests/tests.py @@ -36,4 +36,12 @@ META:{}> >>> from django.http import parse_cookie >>> parse_cookie('invalid:key=true') {} + +>>> request = HttpRequest() +>>> print request.build_absolute_uri(location="https://www.example.com/asdf") +https://www.example.com/asdf +>>> request.get_host = lambda: 'www.example.com' +>>> request.path = '' +>>> print request.build_absolute_uri(location="/path/with:colons") +http://www.example.com/path/with:colons """