Skip to content

Commit d9d6797

Browse files
committed
Fix bugs for Python 2
1 parent c5c6d3c commit d9d6797

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

bencoder.pyx

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212

1313
# Based on https://github.com/karamanolev/bencode3/blob/master/bencode.py
1414

15+
import sys
16+
IS_PY2 = sys.version[0] == '2'
17+
18+
if IS_PY2:
19+
END_CHAR = 'e'
20+
else:
21+
END_CHAR = ord('e')
22+
23+
1524
class BTFailure(Exception):
1625
pass
1726

@@ -39,42 +48,42 @@ def decode_string(bytes x, int f):
3948

4049
def decode_list(bytes x, int f):
4150
r, f = [], f + 1
42-
while x[f] != ord('e'):
51+
while x[f] != END_CHAR:
4352
v, f = decode_func[x[f]](x, f)
4453
r.append(v)
4554
return r, f + 1
4655

4756

4857
def decode_dict(bytes x, int f):
4958
r, f = {}, f + 1
50-
while x[f] != ord('e'):
59+
while x[f] != END_CHAR:
5160
k, f = decode_string(x, f)
5261
r[k], f = decode_func[x[f]](x, f)
5362
return r, f + 1
5463

5564

56-
decode_func = {
57-
ord('l'): decode_list,
58-
ord('d'): decode_dict,
59-
ord('i'): decode_int,
60-
ord('1'): decode_string,
61-
ord('2'): decode_string,
62-
ord('0'): decode_string,
63-
ord('3'): decode_string,
64-
ord('4'): decode_string,
65-
ord('5'): decode_string,
66-
ord('6'): decode_string,
67-
ord('7'): decode_string,
68-
ord('8'): decode_string,
69-
ord('9'): decode_string,
70-
}
65+
decode_func = dict()
66+
67+
for func, keys in [
68+
(decode_list, 'l'),
69+
(decode_dict, 'd'),
70+
(decode_int, 'i'),
71+
(decode_string, [str(x) for x in range(10)])
72+
]:
73+
for key in keys:
74+
if IS_PY2:
75+
decode_func[key] = func
76+
else:
77+
decode_func[ord(key)] = func
78+
7179

7280

7381
def bdecode(bytes x):
7482
try:
7583
r, l = decode_func[x[0]](x, 0)
76-
except (IndexError, KeyError, ValueError):
77-
raise BTFailure("not a valid bencoded string")
84+
except (IndexError, KeyError, ValueError) as e:
85+
raise e
86+
# raise BTFailure("not a valid bencoded string")
7887
if l != len(x):
7988
raise BTFailure("invalid bencoded value (data after valid prefix)")
8089
return r

0 commit comments

Comments
 (0)