Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit 5cff205

Browse files
authored
fix: Dont serialize nan when present in frame local vars (#1312)
* fix: Dont serialize nan when present in vars * fix: Simplify float serializer * fix: Tests * fix: Convert all numbers to string
1 parent d9e787b commit 5cff205

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

raven/utils/serializer/base.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,21 +167,22 @@ class BooleanSerializer(Serializer):
167167
types = (bool,)
168168

169169
def serialize(self, value, **kwargs):
170-
return bool(value)
170+
return repr(bool(value))
171171

172172

173173
class FloatSerializer(Serializer):
174174
types = (float,)
175175

176176
def serialize(self, value, **kwargs):
177-
return float(value)
177+
# Wrap with repr to convert inf/nan to string
178+
return repr(float(value))
178179

179180

180181
class IntegerSerializer(Serializer):
181182
types = (int,)
182183

183184
def serialize(self, value, **kwargs):
184-
return int(value)
185+
return repr(int(value))
185186

186187

187188
class FunctionSerializer(Serializer):
@@ -197,7 +198,7 @@ class LongSerializer(Serializer):
197198
types = (long,) # noqa
198199

199200
def serialize(self, value, **kwargs):
200-
return long(value) # noqa
201+
return repr(long(value)) # noqa
201202

202203

203204
# register all serializers, order matters

tests/base/tests.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,18 @@ def test_exception_event(self):
307307
self.assertEquals(frame['function'], 'test_exception_event')
308308
self.assertTrue('timestamp' in event)
309309

310+
def test_exception_nan_in_vars(self):
311+
try:
312+
foo = float("nan") # noqa
313+
raise ValueError("foo")
314+
except ValueError:
315+
self.client.captureException()
316+
317+
event, = self.client.events
318+
exc, = event['exception']['values']
319+
frame, = exc['stacktrace']['frames']
320+
assert frame['vars']['foo'] == "nan"
321+
310322
def test_exception_event_true_exc_info(self):
311323
try:
312324
raise ValueError('foo')

tests/utils/encoding/tests.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,18 @@ def test_bad_string(self):
6565

6666
def test_float(self):
6767
result = transform(13.0)
68-
self.assertEqual(type(result), float)
69-
self.assertEqual(result, 13.0)
68+
self.assertEqual(result, "13.0")
7069

7170
def test_bool(self):
7271
result = transform(True)
73-
self.assertEqual(type(result), bool)
74-
self.assertEqual(result, True)
72+
self.assertEqual(result, 'True')
7573

7674
def test_int_subclass(self):
7775
class X(int):
7876
pass
7977

8078
result = transform(X())
81-
self.assertEqual(type(result), int)
82-
self.assertEqual(result, 0)
79+
self.assertEqual(result, '0')
8380

8481
def test_dict_keys(self):
8582
x = {'foo': 'bar'}
@@ -176,7 +173,7 @@ def test_recursion_max_depth(self):
176173
def test_list_max_length(self):
177174
x = list(range(10))
178175
result = transform(x, list_max_length=3)
179-
self.assertEqual(result, (0, 1, 2))
176+
self.assertEqual(result, ('0', '1', '2'))
180177

181178
def test_dict_max_length(self):
182179
x = dict((x, x) for x in range(10))

0 commit comments

Comments
 (0)