Skip to content

Commit

Permalink
[1.1.X] Fixed #11522: Restored ability of http redirect responses to …
Browse files Browse the repository at this point in the history
…correctly handle redirect locations with non-ASCII chars.

r12659 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12660 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
kmtracey committed Mar 2, 2010
1 parent cea0374 commit b50b3cf
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
4 changes: 2 additions & 2 deletions django/http/__init__.py
Expand Up @@ -434,14 +434,14 @@ class HttpResponseRedirect(HttpResponse):

def __init__(self, redirect_to):
HttpResponse.__init__(self)
self['Location'] = redirect_to
self['Location'] = iri_to_uri(redirect_to)

class HttpResponsePermanentRedirect(HttpResponse):
status_code = 301

def __init__(self, redirect_to):
HttpResponse.__init__(self)
self['Location'] = redirect_to
self['Location'] = iri_to_uri(redirect_to)

class HttpResponseNotModified(HttpResponse):
status_code = 304
Expand Down
26 changes: 23 additions & 3 deletions tests/regressiontests/views/tests/specials.py
Expand Up @@ -5,11 +5,31 @@ class URLHandling(TestCase):
"""
Tests for URL handling in views and responses.
"""
def test_iri_redirect(self):
redirect_target = "/views/%E4%B8%AD%E6%96%87/target/"

def test_combining_redirect(self):
"""
Tests that redirecting to an IRI, requiring encoding before we use it
in an HTTP response, is handled correctly.
in an HTTP response, is handled correctly. In this case the arg to
HttpRedirect is ASCII but the current request path contains non-ASCII
characters so this test ensures the creation of the full path with a
base non-ASCII part is handled correctly.
"""
response = self.client.get(u'/views/中文/')
self.assertRedirects(response, "/views/%E4%B8%AD%E6%96%87/target/")
self.assertRedirects(response, self.redirect_target)

def test_nonascii_redirect(self):
"""
Tests that a non-ASCII argument to HttpRedirect is handled properly.
"""
response = self.client.get('/views/nonascii_redirect/')
self.assertRedirects(response, self.redirect_target)

def test_permanent_nonascii_redirect(self):
"""
Tests that a non-ASCII argument to HttpPermanentRedirect is handled
properly.
"""
response = self.client.get('/views/permanent_nonascii_redirect/')
self.assertRedirects(response, self.redirect_target, status_code=301)

9 changes: 9 additions & 0 deletions tests/regressiontests/views/urls.py
Expand Up @@ -97,3 +97,12 @@
urlpatterns += patterns('',
(r'^raises/$', views.raises)
)

# rediriects, both temporary and permanent, with non-ASCII targets
urlpatterns += patterns('django.views.generic.simple',
('^nonascii_redirect/$', 'redirect_to',
{'url': u'/views/中文/target/', 'permanent': False}),
('^permanent_nonascii_redirect/$', 'redirect_to',
{'url': u'/views/中文/target/', 'permanent': True}),
)

0 comments on commit b50b3cf

Please sign in to comment.