Opened 13 years ago
Closed 13 years ago
#18902 closed Bug (fixed)
`force_bytes` doesn't return bytes when it's passed an exception
| Reported by: | Aymeric Augustin | Owned by: | nobody |
|---|---|---|---|
| Component: | Python 3 | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I hit the following error — it's a 404 than turns into a 500 because smart_bytes raises an exception:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
File "/Users/aaugustin/Documents/dev/django/django/contrib/staticfiles/handlers.py", line 71, in __call__
return self.application(environ, start_response)
File "/Users/aaugustin/Documents/dev/django/django/core/handlers/wsgi.py", line 237, in __call__
response = self.get_response(request)
File "/Users/aaugustin/Documents/dev/django/django/core/handlers/base.py", line 152, in get_response
response = debug.technical_404_response(request, e)
File "/Users/aaugustin/Documents/dev/django/django/views/debug.py", line 443, in technical_404_response
'reason': smart_bytes(exception, errors='replace'),
File "/Users/aaugustin/Documents/dev/django/django/utils/encoding.py", line 147, in smart_bytes
return force_bytes(s, encoding, strings_only, errors)
File "/Users/aaugustin/Documents/dev/django/django/utils/encoding.py", line 178, in force_bytes
errors) for arg in s])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 23: ordinal not in range(128)
The following change fixes the problem. I believe it was missing from the unicode_literals patch:
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -174,7 +174,7 @@ def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
# An Exception subclass containing non-ASCII data that doesn't
# know how to print itself properly. We shouldn't raise a
# further exception.
- return ' '.join([force_bytes(arg, encoding, strings_only,
+ return b' '.join([force_bytes(arg, encoding, strings_only,
errors) for arg in s])
return six.text_type(s).encode(encoding, errors)
else:
Note:
See TracTickets
for help on using tickets.
In [cc9b767fc60a8b0455a67f00ca23077b55e709bb]: