catch bad parameter version in header
[python-delta-tar] / deltatar / tarfile.py
index 2629e44..526c1ac 100644 (file)
@@ -872,7 +872,13 @@ class _Stream:
                                            % (self.enccounter, iv))
             self.lasthdr   = lasthdr
             self.remainder = hdr ["ctsize"] # distance to next header
-            self.encryption.next (hdr)
+            try:
+                self.encryption.next (hdr)
+            except crypto.InvalidParameter as exn:
+                raise DecryptionError ("Crypto.next(): error ā€œ%sā€ "
+                                       "processing %r at pos %d"
+                                       % (exn, self.fileobj, lasthdr)) \
+                      from exn
 
         return True
 
@@ -1011,7 +1017,7 @@ class _Stream:
         """
         c = len(self.buf)
         t = [self.buf]
-        good_crypto = 0
+        good_crypto = len (t)
         while c < size:
             todo = size
             if self.arcmode & ARCMODE_ENCRYPT:
@@ -1022,7 +1028,7 @@ class _Stream:
                             buf = None
                             break # while
                     except DecryptionError:
-                        if self.tolerant:
+                        if self.tolerant is True:
                             self.buf = b"".join (t [good_crypto:])
                             return b"".join (t [:good_crypto])
                         raise