Просмотр исходного кода

fix: Start fixing RUST_NORMALIZER=1 build (#11640)

* fix: Start fixing RUST_NORMALIZER=1 build

* fix: More cases like this in datascrubber

* fix: More None-bugs
Markus Unterwaditzer 6 лет назад
Родитель
Сommit
084668b650

+ 0 - 1
src/sentry/event_manager.py

@@ -506,7 +506,6 @@ class EventManager(object):
             self._data = CanonicalKeyDict(rust_normalizer.normalize_event(dict(self._data)))
 
             normalize_user_agent(self._data)
-
             return
 
         data = self._data

+ 6 - 5
src/sentry/eventtypes/error.py

@@ -37,11 +37,12 @@ class ErrorEvent(BaseEvent):
         }
 
         # Attach crash location
-        stacktrace = exception.get('stacktrace')
-        if stacktrace:
-            fn = get_crash_file(stacktrace)
-            if fn is not None:
-                rv['filename'] = fn
+        if exception:
+            stacktrace = exception.get('stacktrace')
+            if stacktrace:
+                fn = get_crash_file(stacktrace)
+                if fn is not None:
+                    rv['filename'] = fn
 
         return rv
 

+ 2 - 0
src/sentry/interfaces/stacktrace.py

@@ -814,6 +814,8 @@ class Stacktrace(Interface):
 
         frame_meta = {}
         for index, value in six.iteritems(meta.get('frames', {})):
+            if index == '':
+                continue
             frame = self.frames[int(index)]
             frame_meta[index] = frame.get_api_meta(value, is_public=is_public)
 

+ 2 - 0
src/sentry/utils/contexts_normalization.py

@@ -94,6 +94,8 @@ def _parse_user_agent(data):
         for key, value in headers:
             if key != 'User-Agent':
                 continue
+            if not value:
+                continue
             ua = Parse(value)
             if not ua:
                 continue

+ 18 - 19
src/sentry/utils/data_scrubber.py

@@ -75,33 +75,32 @@ class SensitiveDataFilter(object):
 
     def apply(self, data):
         # TODO(dcramer): move this into each interface
-        if 'stacktrace' in data:
+        if data.get('stacktrace'):
             self.filter_stacktrace(data['stacktrace'])
 
-        if 'exception' in data:
-            for exc in get_path(data, 'exception', 'values', filter=True) or ():
-                if exc.get('stacktrace'):
-                    self.filter_stacktrace(exc['stacktrace'])
+        for exc in get_path(data, 'exception', 'values', filter=True) or ():
+            if exc.get('stacktrace'):
+                self.filter_stacktrace(exc['stacktrace'])
 
-        if 'breadcrumbs' in data:
-            for crumb in data['breadcrumbs'].get('values') or ():
-                self.filter_crumb(crumb)
+        for crumb in get_path(data, 'breadcrumbs', 'values', filter=True) or ():
+            self.filter_crumb(crumb)
 
-        if 'request' in data:
+        if data.get('request'):
             self.filter_http(data['request'])
 
-        if 'user' in data:
+        if data.get('user'):
             self.filter_user(data['user'])
 
-        if 'csp' in data:
+        if data.get('csp'):
             self.filter_csp(data['csp'])
 
-        if 'extra' in data:
+        if data.get('extra'):
             data['extra'] = varmap(self.sanitize, data['extra'])
 
-        if 'contexts' in data:
+        if data.get('contexts'):
             for key, value in six.iteritems(data['contexts']):
-                data['contexts'][key] = varmap(self.sanitize, value)
+                if value:
+                    data['contexts'][key] = varmap(self.sanitize, value)
 
     def sanitize(self, key, value):
         if value is None or value == '':
@@ -138,16 +137,16 @@ class SensitiveDataFilter(object):
         return value
 
     def filter_stacktrace(self, data):
-        if 'frames' not in data:
+        if not data.get('frames'):
             return
         for frame in data['frames']:
-            if 'vars' not in frame:
+            if not frame or not frame.get('vars'):
                 continue
             frame['vars'] = varmap(self.sanitize, frame['vars'])
 
     def filter_http(self, data):
         for n in ('data', 'cookies', 'headers', 'env', 'query_string'):
-            if n not in data:
+            if not data.get(n):
                 continue
 
             if isinstance(data[n], six.string_types) and '=' in data[n]:
@@ -167,7 +166,7 @@ class SensitiveDataFilter(object):
                 data[n] = varmap(self.sanitize, data[n])
 
     def filter_user(self, data):
-        if 'data' not in data:
+        if not data.get('data'):
             return
         data['data'] = varmap(self.sanitize, data['data'])
 
@@ -179,7 +178,7 @@ class SensitiveDataFilter(object):
 
     def filter_csp(self, data):
         for key in 'blocked_uri', 'document_uri':
-            if key not in data:
+            if not data.get(key):
                 continue
             value = data[key]
             if not isinstance(value, six.string_types):

+ 1 - 1
tests/integration/tests.py

@@ -211,7 +211,7 @@ class SentryRemoteTest(TestCase):
         timestamp = timezone.now().replace(
             microsecond=0, tzinfo=timezone.utc
         ) - datetime.timedelta(hours=1)
-        kwargs = {u'message': 'hello', 'timestamp': timestamp.strftime('%s.%f')}
+        kwargs = {u'message': 'hello', 'timestamp': float(timestamp.strftime('%s.%f'))}
         resp = self._postWithSignature(kwargs)
         assert resp.status_code == 200, resp.content
         instance = Event.objects.get()