summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver A Bristow <oliver@memset.com>2015-04-21 13:51:43 +0100
committerClaude Paroz <claude@2xlibre.net>2015-04-21 22:02:04 +0200
commit4cd727095dbaad5f8ecfcca226e6f3e06ce11a01 (patch)
treec03327b2503558d23a969ec6b536ef3c51988168
parent6e8cb75e3edef1ed440e29c31966c44cc1598339 (diff)
Fixed #24681 -- Removed Unicode bug in BrokenLinkEmailMiddleware
-rw-r--r--django/middleware/common.py2
-rw-r--r--tests/middleware/tests.py10
2 files changed, 11 insertions, 1 deletions
diff --git a/django/middleware/common.py b/django/middleware/common.py
index dad1e6b2eb..68fcb8a780 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -127,7 +127,7 @@ class BrokenLinkEmailsMiddleware(object):
referer = force_text(request.META.get('HTTP_REFERER', ''), errors='replace')
if not self.is_ignorable_request(request, path, domain, referer):
- ua = request.META.get('HTTP_USER_AGENT', '<none>')
+ ua = force_text(request.META.get('HTTP_USER_AGENT', '<none>'), errors='replace')
ip = request.META.get('REMOTE_ADDR', '<none>')
mail_managers(
"Broken %slink on %s" % (
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py
index 3533b1d957..8b20a0c627 100644
--- a/tests/middleware/tests.py
+++ b/tests/middleware/tests.py
@@ -320,6 +320,16 @@ class BrokenLinkEmailsMiddlewareTest(TestCase):
BrokenLinkEmailsMiddleware().process_response(self.req, self.resp)
self.assertEqual(len(mail.outbox), 1)
+ @skipIf(six.PY3, "HTTP_USER_AGENT is str type on Python 3")
+ def test_404_error_nonascii_user_agent(self):
+ # Such user agent strings should not happen, but anyway, if it happens,
+ # let's not crash
+ self.req.META['HTTP_REFERER'] = '/another/url/'
+ self.req.META['HTTP_USER_AGENT'] = b'\xd0\xbb\xd0\xb8\xff\xff'
+ BrokenLinkEmailsMiddleware().process_response(self.req, self.resp)
+ self.assertEqual(len(mail.outbox), 1)
+ self.assertIn('User agent: \u043b\u0438\ufffd\ufffd\n', mail.outbox[0].body)
+
def test_custom_request_checker(self):
class SubclassedMiddleware(BrokenLinkEmailsMiddleware):
ignored_user_agent_patterns = (re.compile(r'Spider.*'),