From 040b60c38c1d42999bddb7e0a312e7a17393dde0 Mon Sep 17 00:00:00 2001
From: Calen Pennington <cale@edx.org>
Date: Mon, 5 Nov 2018 22:38:31 -0500
Subject: [PATCH] Stop swallowing UnicodeEncodeErrors in courseware rendering

---
 lms/djangoapps/courseware/courses.py     | 2 +-
 lms/djangoapps/courseware/views/index.py | 4 ++--
 lms/djangoapps/courseware/views/views.py | 8 +++-----
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/lms/djangoapps/courseware/courses.py b/lms/djangoapps/courseware/courses.py
index caccff13132..73edd42badb 100644
--- a/lms/djangoapps/courseware/courses.py
+++ b/lms/djangoapps/courseware/courses.py
@@ -77,7 +77,7 @@ def get_course_by_id(course_key, depth=0):
     if course:
         return course
     else:
-        raise Http404("Course not found: {}.".format(unicode(course_key)))
+        raise Http404(u"Course not found: {}.".format(unicode(course_key)))
 
 
 def get_course_with_access(user, action, course_key, depth=0, check_if_enrolled=False, check_survey_complete=True):
diff --git a/lms/djangoapps/courseware/views/index.py b/lms/djangoapps/courseware/views/index.py
index a9768fc1af5..a8af5b970b2 100644
--- a/lms/djangoapps/courseware/views/index.py
+++ b/lms/djangoapps/courseware/views/index.py
@@ -151,7 +151,7 @@ class CoursewareIndex(View):
 
                 return self.render(request)
         except Exception as exception:  # pylint: disable=broad-except
-            return CourseTabView.handle_exceptions(request, self.course, exception)
+            return CourseTabView.handle_exceptions(request, self.course_key, self.course, exception)
 
     def _setup_masquerade_for_effective_user(self):
         """
@@ -315,7 +315,7 @@ class CoursewareIndex(View):
             if not child:
                 # User may be trying to access a child that isn't live yet
                 if not self._is_masquerading_as_student():
-                    raise Http404('No {block_type} found with name {url_name}'.format(
+                    raise Http404(u'No {block_type} found with name {url_name}'.format(
                         block_type=block_type,
                         url_name=url_name,
                     ))
diff --git a/lms/djangoapps/courseware/views/views.py b/lms/djangoapps/courseware/views/views.py
index 18a5b220ac9..599efdc1537 100644
--- a/lms/djangoapps/courseware/views/views.py
+++ b/lms/djangoapps/courseware/views/views.py
@@ -509,7 +509,7 @@ class CourseTabView(EdxFragmentView):
                 set_custom_metrics_for_course_key(course_key)
                 return super(CourseTabView, self).get(request, course=course, page_context=page_context, **kwargs)
             except Exception as exception:  # pylint: disable=broad-except
-                return CourseTabView.handle_exceptions(request, course, exception)
+                return CourseTabView.handle_exceptions(request, course_key, course, exception)
 
     @staticmethod
     def url_to_enroll(course_key):
@@ -560,14 +560,12 @@ class CourseTabView(EdxFragmentView):
                     )
 
     @staticmethod
-    def handle_exceptions(request, course, exception):
+    def handle_exceptions(request, course_key, course, exception):
         """
         Handle exceptions raised when rendering a view.
         """
         if isinstance(exception, Redirect) or isinstance(exception, Http404):
             raise
-        if isinstance(exception, UnicodeEncodeError):
-            raise Http404("URL contains Unicode characters")
         if settings.DEBUG:
             raise
         user = request.user
@@ -576,7 +574,7 @@ class CourseTabView(EdxFragmentView):
             request.path,
             getattr(user, 'real_user', user),
             user,
-            None if course is None else text_type(course.id),
+            text_type(course_key),
         )
         try:
             return render_to_response(
-- 
GitLab