diff --git a/libmat2/torrent.py b/libmat2/torrent.py
index f5935e65ec9265660377da8f8ca6e7fbf6af4fd7..b598065c6ac9c4d95fdd24c626f56dbfdbf93ee8 100644
--- a/libmat2/torrent.py
+++ b/libmat2/torrent.py
@@ -1,4 +1,6 @@
+import logging
 from typing import Union, Tuple, Dict
+
 from . import abstract
 
 
@@ -58,6 +60,8 @@ 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:
@@ -67,6 +71,8 @@ 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
@@ -119,9 +125,9 @@ class _BencodeHandler(object):
         try:
             r, l = self.__decode_func[s[0]](s)
         except (IndexError, KeyError, ValueError) as e:
-            print("not a valid bencoded string: %s" % e)
+            logging.debug("Not a valid bencoded string: %s" % e)
             return None
         if l != b'':
-            print("invalid bencoded value (data after valid prefix)")
+            logging.debug("Invalid bencoded value (data after valid prefix)")
             return None
         return r
diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py
index 3d08dea1c8e3c35cda7d78eac7b948d13267da59..7deeadcd29aec665264904afa5d41aec4eb4136e 100644
--- a/tests/test_libmat2.py
+++ b/tests/test_libmat2.py
@@ -57,6 +57,20 @@ class TestCorruptedFiles(unittest.TestCase):
             images.PNGParser('./tests/data/clean.pdf')
         os.remove('./tests/data/clean.pdf')
 
+    def test_torrent(self):
+        shutil.copy('./tests/data/dirty.png', './tests/data/clean.torrent')
+        p = torrent.TorrentParser('./tests/data/clean.torrent')
+        self.assertFalse(p.remove_all())
+        expected = {'Unknown meta': 'Unable to parse torrent file "./tests/data/clean.torrent".'}
+        self.assertEqual(p.get_meta(), expected)
+
+        with open("./tests/data/clean.torrent", "a") as f:
+            f.write("trailing garbage")
+        p = torrent.TorrentParser('./tests/data/clean.torrent')
+        self.assertEqual(p.get_meta(), expected)
+
+        os.remove('./tests/data/clean.torrent')
+
 class TestGetMeta(unittest.TestCase):
     def test_pdf(self):
         p = pdf.PDFParser('./tests/data/dirty.pdf')