Skip to content

Commit 90061f8

Browse files
Fix 0 length bencoded strings
1 parent d3398f1 commit 90061f8

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

nrepl/bencode.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def _read_int(s, terminator=None, init_data=None):
4646

4747

4848
def _read_bytes(s, n):
49-
data = StringIO()
49+
data = StringIO('')
5050
cnt = 0
5151
while cnt < n:
5252
m = s.read(n - cnt)
@@ -95,7 +95,7 @@ def _read_map(s):
9595

9696
def _read_datum(s):
9797
delim = _read_delimiter(s)
98-
if delim:
98+
if delim is not '':
9999
return _read_fns.get(delim, lambda s: _read_bytes(s, delim))(s)
100100

101101

@@ -135,7 +135,7 @@ def encode(v):
135135
def decode_file(file):
136136
while True:
137137
x = _read_datum(file)
138-
if not x:
138+
if x is None:
139139
break
140140
yield x
141141

test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ def test_encoding (self):
2323
self.assertEqual([{u'a': 1, u'c': [{u'x': [u'y']}], u'b': [2, [3]]}],
2424
list(decode('d1:ai1e1:cld1:xl1:yeee1:bli2eli3eeee')))
2525

26+
def test_empty_string (self):
27+
self.assertEqual(['a'], list(decode('1:a')))
28+
self.assertEqual([''], list(decode('0:')))
29+
self.assertEqual([['spam', '', 'a', 'ab']], list(decode('l4:spam0:1:a2:abe')))
30+
self.assertEqual([{'spam': ''}], list(decode('d4:spam0:e')))
31+
2632
class REPLTest (unittest.TestCase):
2733
def setUp (self):
2834
# this here only to accommodate travis, which puts leiningen @ lein2

0 commit comments

Comments
 (0)