diff options
| author | Oliver A Bristow <oliver@memset.com> | 2015-04-21 13:51:43 +0100 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2015-04-21 22:02:04 +0200 |
| commit | 4cd727095dbaad5f8ecfcca226e6f3e06ce11a01 (patch) | |
| tree | c03327b2503558d23a969ec6b536ef3c51988168 | |
| parent | 6e8cb75e3edef1ed440e29c31966c44cc1598339 (diff) | |
Fixed #24681 -- Removed Unicode bug in BrokenLinkEmailMiddleware
| -rw-r--r-- | django/middleware/common.py | 2 | ||||
| -rw-r--r-- | tests/middleware/tests.py | 10 |
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.*'), |
