diff options
author | Calum Lind <calumlind+deluge@gmail.com> | 2019-05-18 11:12:01 +0100 |
---|---|---|
committer | Calum Lind <calumlind+deluge@gmail.com> | 2019-05-18 16:15:27 +0100 |
commit | 09cfd9b89e8c9dcbe57635fb6be9eb5a5b99a5d9 (patch) | |
tree | c06e69b0de2f531412bfc3397465a0afa0128df4 | |
parent | b961e11df67f34f9ef4eb44621781b3bc4b37735 (diff) | |
download | deluge-09cfd9b89e8c9dcbe57635fb6be9eb5a5b99a5d9.tar.gz deluge-09cfd9b89e8c9dcbe57635fb6be9eb5a5b99a5d9.tar.bz2 deluge-09cfd9b89e8c9dcbe57635fb6be9eb5a5b99a5d9.zip |
[bencode] Fix unhandled TypeError with string
Passing a non-bencoded dict to bdecode resulted in an unhandled
TypeError.
- Catch TypeError in decode_func.
- Add bdecode tests.
- Replace KeyError and IndexError with base LookupError.
-rw-r--r-- | deluge/bencode.py | 2 | ||||
-rw-r--r-- | deluge/tests/test_bencode.py | 10 |
2 files changed, 11 insertions, 1 deletions
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}) |