mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
[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 8b93b31487 from master
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user