diff options
| author | Walter Doekes <walter+github@wjd.nu> | 2014-08-13 15:32:14 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-08-13 12:56:26 -0400 |
| commit | e0e28bfe715b3f7d4e6cc7ab7bf4000b22c0cf79 (patch) | |
| tree | 85485d54d5e13a3a4921fad05d647f6de60f87da /django | |
| parent | d441a9d00629bbaf3f1ef0e4f75f3ce08b76c214 (diff) | |
Fixed #20368 -- Made TECHNICAL_500 more robust against bad input.
This limits large variables and avoids non-utf-8 in the TECHNICAL_500 output.
Diffstat (limited to 'django')
| -rw-r--r-- | django/views/debug.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/django/views/debug.py b/django/views/debug.py index 23bf16604d..20fe104399 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -309,7 +309,17 @@ class ExceptionReporter(object): frames = self.get_traceback_frames() for i, frame in enumerate(frames): if 'vars' in frame: - frame['vars'] = [(k, force_escape(pprint(v))) for k, v in frame['vars']] + frame_vars = [] + for k, v in frame['vars']: + v = pprint(v) + # The force_escape filter assume unicode, make sure that works + if isinstance(v, six.binary_type): + v = v.decode('utf-8', 'replace') # don't choke on non-utf-8 input + # Trim large blobs of data + if len(v) > 4096: + v = '%s... <trimmed %d bytes string>' % (v[0:4096], len(v)) + frame_vars.append((k, force_escape(v))) + frame['vars'] = frame_vars frames[i] = frame unicode_hint = '' |
