summaryrefslogtreecommitdiff
path: root/tests/urlpatterns_reverse/tests.py
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2014-04-20 13:29:12 -0400
committerTim Graham <timograham@gmail.com>2014-04-21 18:29:12 -0400
commit546740544d7f69254a67b06a3fc7fa0c43512958 (patch)
treea7a3133de74dfff0bcfbb3d21c524198d33a3303 /tests/urlpatterns_reverse/tests.py
parent0bd913a19cf0e7515834d6cb6d9e668840fecce5 (diff)
[1.7.x] Fixed a remote code execution vulnerabilty in URL reversing.
Thanks Benjamin Bach for the report and initial patch. This is a security fix; disclosure to follow shortly. Backport of 8b93b31487d6d3b0fcbbd0498991ea0db9088054 from master
Diffstat (limited to 'tests/urlpatterns_reverse/tests.py')
-rw-r--r--tests/urlpatterns_reverse/tests.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index a57b7e2a17..b2b2d5fc65 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -1,8 +1,10 @@
+# -*- coding: utf-8 -*-
"""
Unit tests for reverse URL lookups.
"""
from __future__ import unicode_literals
+import sys
import unittest
from django.contrib.auth.models import User
@@ -355,6 +357,25 @@ class ReverseShortcutTests(TestCase):
self.assertEqual(res.url, '/foo/')
res = redirect('http://example.com/')
self.assertEqual(res.url, 'http://example.com/')
+ # Assert that we can redirect using UTF-8 strings
+ res = redirect('/æøå/abc/')
+ self.assertEqual(res.url, '/%C3%A6%C3%B8%C3%A5/abc/')
+ # Assert that no imports are attempted when dealing with a relative path
+ # (previously, the below would resolve in a UnicodeEncodeError from __import__ )
+ res = redirect('/æøå.abc/')
+ self.assertEqual(res.url, '/%C3%A6%C3%B8%C3%A5.abc/')
+ res = redirect('os.path')
+ self.assertEqual(res.url, 'os.path')
+
+ def test_no_illegal_imports(self):
+ # modules that are not listed in urlpatterns should not be importable
+ redirect("urlpatterns_reverse.nonimported_module.view")
+ self.assertNotIn("urlpatterns_reverse.nonimported_module", sys.modules)
+
+ def test_reverse_by_path_nested(self):
+ # Views that are added to urlpatterns using include() should be
+ # reversable by doted path.
+ self.assertEqual(reverse('urlpatterns_reverse.views.nested_view'), '/includes/nested_path/')
def test_redirect_view_object(self):
from .views import absolute_kwargs_view