diff --git a/nyaa/bencode.py b/nyaa/bencode.py index 0891e60..6cdd14c 100644 --- a/nyaa/bencode.py +++ b/nyaa/bencode.py @@ -55,13 +55,15 @@ def _bencode_decode(file_object, decode_keys_as_utf8=True): return items kind = file_object.read(1) + if not kind: + raise create_ex('EOF, expecting kind') if kind == _B_INT: # Integer int_bytes = b'' while True: c = file_object.read(1) if not c: - raise create_ex('Unexpected end while reading an integer') + raise create_ex('EOF, expecting more integer') elif c == _B_END: try: return int(int_bytes.decode('utf8')) @@ -97,6 +99,8 @@ def _bencode_decode(file_object, decode_keys_as_utf8=True): # Read string length until a ':' while True: c = file_object.read(1) + if not c: + raise create_ex('EOF, expecting more string len') if c in _DIGITS: str_len_bytes += c elif c == b':': diff --git a/tests/test_bencode.py b/tests/test_bencode.py index e352de8..9426f01 100644 --- a/tests/test_bencode.py +++ b/tests/test_bencode.py @@ -58,11 +58,15 @@ class TestBencode(unittest.TestCase): (b'ie', bencode.MalformedBencodeException, r'Unable to parse int'), (b'i64', bencode.MalformedBencodeException, - r'Unexpected end while reading an integer'), + r'EOF, expecting more integer'), + (b'', bencode.MalformedBencodeException, + r'EOF, expecting kind'), (b'i6-4', bencode.MalformedBencodeException, r'Unexpected input while reading an integer'), (b'4#string', bencode.MalformedBencodeException, r'Unexpected input while reading string length'), + (b'4', bencode.MalformedBencodeException, + r'EOF, expecting more string len'), (b'$:string', bencode.MalformedBencodeException, r'Unexpected data type'), (b'd5:world7:numbersli1ei2eee', bencode.MalformedBencodeException,