Skip to content

Commit a72f2df

Browse files
Correctly handle payloads that are empty lists or dictionaries (fixes #5)
1 parent 3cb904c commit a72f2df

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

socketio/packet.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,11 @@ def _data_is_binary(self, data):
146146
elif isinstance(data, list):
147147
return functools.reduce(
148148
lambda a, b: a or b, [self._data_is_binary(item)
149-
for item in data])
149+
for item in data], False)
150150
elif isinstance(data, dict):
151151
return functools.reduce(
152152
lambda a, b: a or b, [self._data_is_binary(item)
153-
for item in six.itervalues(data)])
153+
for item in six.itervalues(data)],
154+
False)
154155
else:
155156
return False

tests/test_packet.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,18 @@ def test_decode_many_binary_ack(self):
172172
self.assertEqual(pkt.data['a'], '123')
173173
self.assertEqual(pkt.data['b'], b'456')
174174
self.assertEqual(pkt.data['c'], [b'789', 123])
175+
176+
def test_data_is_binary_list(self):
177+
pkt = packet.Packet()
178+
self.assertFalse(pkt._data_is_binary([six.text_type('foo')]))
179+
self.assertFalse(pkt._data_is_binary([]))
180+
self.assertTrue(pkt._data_is_binary([b'foo']))
181+
self.assertTrue(pkt._data_is_binary([six.text_type('foo'), b'bar']))
182+
183+
def test_data_is_binary_dict(self):
184+
pkt = packet.Packet()
185+
self.assertFalse(pkt._data_is_binary({'a': six.text_type('foo')}))
186+
self.assertFalse(pkt._data_is_binary({}))
187+
self.assertTrue(pkt._data_is_binary({'a': b'foo'}))
188+
self.assertTrue(pkt._data_is_binary({'a': six.text_type('foo'),
189+
'b': b'bar'}))

0 commit comments

Comments
 (0)