summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorprokaktus <proktusfahitasiv@gmail.com>2017-12-27 04:29:22 +0300
committerAshley Camba <ashwoods@gmail.com>2017-12-31 05:37:23 +0100
commit20655d1f96700000f38da90e49b55c619294a49f (patch)
tree413f97c6e60a9508ec19cf18fca0ed4c4889d367
parentc7ac0b7818a9bd132e11ad69d16114e6a20e0004 (diff)
downloadraven-20655d1f96700000f38da90e49b55c619294a49f.tar.gz
Fix skipping sanitizer for bytes data in filter_http
-rw-r--r--raven/processors.py6
-rw-r--r--tests/contrib/django/tests.py2
-rw-r--r--tests/processors/tests.py6
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):