diff --git a/deluge/bencode.py b/deluge/bencode.py index 420ccf646..0c2674b9b 100644 --- a/deluge/bencode.py +++ b/deluge/bencode.py @@ -84,7 +84,7 @@ decode_func[b'9'] = decode_string def bdecode(x): try: r, __ = decode_func[x[0:1]](x, 0) - except (IndexError, KeyError, ValueError): + except (LookupError, TypeError, ValueError): raise BTFailure('Not a valid bencoded string') else: return r diff --git a/deluge/tests/test_bencode.py b/deluge/tests/test_bencode.py index bdad16fa4..b49c21f83 100644 --- a/deluge/tests/test_bencode.py +++ b/deluge/tests/test_bencode.py @@ -21,4 +21,14 @@ class BencodeTestCase(unittest.TestCase): bencode.bencode({b'info': metainfo}) def test_bencode_unicode_value(self): + self.assertEqual(bencode.bencode(b'abc'), b'3:abc') self.assertEqual(bencode.bencode('abc'), b'3:abc') + + def test_bdecode(self): + self.assertEqual(bencode.bdecode(b'3:dEf'), b'dEf') + with self.assertRaises(bencode.BTFailure): + bencode.bdecode('dEf') + with self.assertRaises(bencode.BTFailure): + bencode.bdecode(b'dEf') + with self.assertRaises(bencode.BTFailure): + bencode.bdecode({'dEf': 123})