mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.7.x] Fixed #23593 -- Fixed crash in AdminEmailHandler with non-ASCII characters in request.
Thanks edevil for the report and Simon Charette for review.
Backport of 9dff5ce7c7 from master
			
			
This commit is contained in:
		| @@ -1,3 +1,5 @@ | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import logging | ||||
| import sys | ||||
| import warnings | ||||
| @@ -6,6 +8,7 @@ from django.conf import settings | ||||
| from django.core import mail | ||||
| from django.core.mail import get_connection | ||||
| from django.utils.deprecation import RemovedInNextVersionWarning | ||||
| from django.utils.encoding import force_text | ||||
| from django.utils.module_loading import import_string | ||||
| from django.views.debug import ExceptionReporter, get_exception_reporter_filter | ||||
|  | ||||
| @@ -106,7 +109,7 @@ class AdminEmailHandler(logging.Handler): | ||||
|                 record.getMessage() | ||||
|             ) | ||||
|             filter = get_exception_reporter_filter(request) | ||||
|             request_repr = '\n{0}'.format(filter.get_request_repr(request)) | ||||
|             request_repr = '\n{0}'.format(force_text(filter.get_request_repr(request))) | ||||
|         except Exception: | ||||
|             subject = '%s: %s' % ( | ||||
|                 record.levelname, | ||||
|   | ||||
| @@ -97,3 +97,6 @@ Bugfixes | ||||
|   possible to import arbitrary packages from the Python path. This was not | ||||
|   considered a security issue because ``admindocs`` is only accessible to staff | ||||
|   users (:ticket:`23601`). | ||||
|  | ||||
| * Fixed ``UnicodeDecodeError`` crash in ``AdminEmailHandler`` with non-ASCII | ||||
|   characters in the request (:ticket:`23593`). | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| # -*- coding:utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import logging | ||||
| @@ -319,6 +320,26 @@ class AdminEmailHandlerTest(TestCase): | ||||
|             mail.mail_admins = orig_mail_admins | ||||
|             admin_email_handler.email_backend = orig_email_backend | ||||
|  | ||||
|     @override_settings( | ||||
|         ADMINS=(('whatever admin', 'admin@example.com'),), | ||||
|     ) | ||||
|     def test_emit_non_ascii(self): | ||||
|         """ | ||||
|         #23593 - AdminEmailHandler should allow Unicode characters in the | ||||
|         request. | ||||
|         """ | ||||
|         handler = self.get_admin_email_handler(self.logger) | ||||
|         record = self.logger.makeRecord('name', logging.ERROR, 'function', 'lno', 'message', None, None) | ||||
|         rf = RequestFactory() | ||||
|         url_path = '/º' | ||||
|         record.request = rf.get(url_path) | ||||
|         handler.emit(record) | ||||
|         self.assertEqual(len(mail.outbox), 1) | ||||
|         msg = mail.outbox[0] | ||||
|         self.assertEqual(msg.to, ['admin@example.com']) | ||||
|         self.assertEqual(msg.subject, "[Django] ERROR (EXTERNAL IP): message") | ||||
|         self.assertIn("path:%s" % url_path, msg.body) | ||||
|  | ||||
|  | ||||
| class SettingsConfigTest(AdminScriptTestCase): | ||||
|     """ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user