diff options
author | prokaktus <proktusfahitasiv@gmail.com> | 2017-12-27 04:29:22 +0300 |
---|---|---|
committer | Ashley Camba <ashwoods@gmail.com> | 2017-12-31 05:37:23 +0100 |
commit | 20655d1f96700000f38da90e49b55c619294a49f (patch) | |
tree | 413f97c6e60a9508ec19cf18fca0ed4c4889d367 | |
parent | c7ac0b7818a9bd132e11ad69d16114e6a20e0004 (diff) | |
download | raven-20655d1f96700000f38da90e49b55c619294a49f.tar.gz |
Fix skipping sanitizer for bytes data in filter_http
-rw-r--r-- | raven/processors.py | 6 | ||||
-rw-r--r-- | tests/contrib/django/tests.py | 2 | ||||
-rw-r--r-- | tests/processors/tests.py | 6 |
3 files changed, 12 insertions, 2 deletions
diff --git a/raven/processors.py b/raven/processors.py index 4724482..16cd6b1 100644 --- a/raven/processors.py +++ b/raven/processors.py @@ -9,7 +9,7 @@ from __future__ import absolute_import import re -from raven.utils.compat import string_types, text_type +from raven.utils.compat import string_types, text_type, PY3 from raven.utils import varmap @@ -110,6 +110,10 @@ class SanitizeKeysProcessor(Processor): if n not in data: continue + # data could be provided as bytes + if PY3 and isinstance(data[n], bytes): + data[n] = data[n].decode('utf-8', 'replace') + if isinstance(data[n], string_types) and '=' in data[n]: # at this point we've assumed it's a standard HTTP query # or cookie diff --git a/tests/contrib/django/tests.py b/tests/contrib/django/tests.py index 2d72385..56f863d 100644 --- a/tests/contrib/django/tests.py +++ b/tests/contrib/django/tests.py @@ -209,7 +209,7 @@ class DjangoClientTest(TestCase): content_type='application/json') assert len(self.raven.events) == 1 event = self.raven.events.pop(0) - assert event['request']['data'] == b'{"a":"b"}' + assert event['request']['data'] == '{"a":"b"}' def test_capture_event_with_request_middleware(self): path = reverse('sentry-trigger-event') diff --git a/tests/processors/tests.py b/tests/processors/tests.py index 4c6cb59..1daabf2 100644 --- a/tests/processors/tests.py +++ b/tests/processors/tests.py @@ -357,6 +357,12 @@ class SanitizePasswordsProcessorTest(TestCase): result = proc.sanitize('__repr__: жили-были', '42') self.assertEquals(result, '42') + def test_sanitize_bytes(self): + proc = SanitizePasswordsProcessor(Mock()) + data = {'data': b'password=1234'} + result = proc.filter_http(data) + self.assertIn(data['data'], 'password=%s' % proc.MASK) + class RemovePostDataProcessorTest(TestCase): def test_does_remove_data(self): |