summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCalum Lind <calumlind+deluge@gmail.com>2019-05-18 11:12:01 +0100
committerCalum Lind <calumlind+deluge@gmail.com>2019-05-18 16:15:27 +0100
commit09cfd9b89e8c9dcbe57635fb6be9eb5a5b99a5d9 (patch)
treec06e69b0de2f531412bfc3397465a0afa0128df4
parentb961e11df67f34f9ef4eb44621781b3bc4b37735 (diff)
downloaddeluge-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.py2
-rw-r--r--deluge/tests/test_bencode.py10
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})