From 3cd4f9111f4a050ff365bbe103993b3a89fdc29d Mon Sep 17 00:00:00 2001 From: jvoisin Date: Sun, 8 Jul 2018 15:13:03 +0200 Subject: [PATCH] Bump coverage for torrent handling --- libmat2/torrent.py | 15 +++++---------- tests/test_corrupted_files.py | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/libmat2/torrent.py b/libmat2/torrent.py index d614136..925ac55 100644 --- a/libmat2/torrent.py +++ b/libmat2/torrent.py @@ -60,8 +60,6 @@ class _BencodeHandler(object): def __decode_int(s: bytes) -> Tuple[int, bytes]: s = s[1:] next_idx = s.index(b'e') - if next_idx is None: - raise ValueError # missing suffix if s.startswith(b'-0'): raise ValueError # negative zero doesn't exist elif s.startswith(b'0') and next_idx != 1: @@ -70,16 +68,13 @@ class _BencodeHandler(object): @staticmethod def __decode_string(s: bytes) -> Tuple[bytes, bytes]: - sep = s.index(b':') - if set is None: - raise ValueError # missing suffix - str_len = int(s[:sep]) - if str_len < 0: - raise ValueError - elif s[0] == b'0' and sep != 1: + colon = s.index(b':') + str_len = int(s[:colon]) + print('S: %s' % s) + if s[0] == '0' and colon != 1: raise ValueError s = s[1:] - return s[sep:sep+str_len], s[sep+str_len:] + return s[colon:colon+str_len], s[colon+str_len:] def __decode_list(self, s: bytes) -> Tuple[list, bytes]: r = list() diff --git a/tests/test_corrupted_files.py b/tests/test_corrupted_files.py index 776b0e9..a77acbc 100644 --- a/tests/test_corrupted_files.py +++ b/tests/test_corrupted_files.py @@ -54,6 +54,26 @@ class TestCorruptedFiles(unittest.TestCase): with self.assertRaises(ValueError): torrent.TorrentParser('./tests/data/clean.torrent') + with open("./tests/data/clean.torrent", "w") as f: + f.write("i-0e") + with self.assertRaises(ValueError): + torrent.TorrentParser('./tests/data/clean.torrent') + + with open("./tests/data/clean.torrent", "w") as f: + f.write("i00e") + with self.assertRaises(ValueError): + torrent.TorrentParser('./tests/data/clean.torrent') + + with open("./tests/data/clean.torrent", "w") as f: + f.write("d01:AAAAAAAAA") + with self.assertRaises(ValueError): + torrent.TorrentParser('./tests/data/clean.torrent') + + with open("./tests/data/clean.torrent", "w") as f: + f.write("1:aaa") + with self.assertRaises(ValueError): + torrent.TorrentParser('./tests/data/clean.torrent') + os.remove('./tests/data/clean.torrent') def test_odg(self):