404 error for unwanted unicode in url

LMS-2488
This commit is contained in:
Mat Peterson
2014-06-17 14:53:17 +00:00
parent 06dbb68e75
commit c86cbe466c
2 changed files with 22 additions and 0 deletions

View File

@@ -158,6 +158,22 @@ class ViewsTestCase(TestCase):
response = self.client.get(request_url)
self.assertEqual(response.status_code, 404)
def test_unicode_handling_in_url(self):
url_parts = [
'/courses',
self.course.id.to_deprecated_string(),
self.chapter.location.name,
self.section.location.name,
'1'
]
for idx, val in enumerate(url_parts):
url_parts_copy = url_parts[:]
url_parts_copy[idx] = val + u'χ'
request_url = '/'.join(url_parts_copy)
response = self.client.get(request_url)
self.assertEqual(response.status_code, 404)
def test_registered_for_course(self):
self.assertFalse(views.registered_for_course('Basketweaving', None))
mock_user = MagicMock()

View File

@@ -404,6 +404,12 @@ def index(request, course_id, chapter=None, section=None,
result = render_to_response('courseware/courseware.html', context)
except Exception as e:
# Doesn't bar Unicode characters from URL, but if Unicode characters do
# cause an error it is a graceful failure.
if isinstance(e, UnicodeEncodeError):
raise Http404("URL contains Unicode characters")
if isinstance(e, Http404):
# let it propagate
raise