From 1ed44e7bd683d5a4543553e4332a1d51fc0d803b Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Mon, 14 Aug 2017 17:24:56 +0200 Subject: [PATCH] catch bad parameter version in header --- deltatar/crypto.py | 4 ++-- deltatar/tarfile.py | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/deltatar/crypto.py b/deltatar/crypto.py index 92c0d8b..930d1f9 100755 --- a/deltatar/crypto.py +++ b/deltatar/crypto.py @@ -574,8 +574,8 @@ def kdf_by_version (paramversion=None, defs=None): if paramversion is not None: defs = ENCRYPTION_PARAMETERS.get(paramversion, None) if defs is None: - raise ValueError ("no encryption parameters for version %r" - % paramversion) + raise InvalidParameter ("no encryption parameters for version %r" + % paramversion) (kdf, params) = defs["kdf"] fn = None if kdf == "scrypt" : fn = kdf_scrypt diff --git a/deltatar/tarfile.py b/deltatar/tarfile.py index 2629e44..526c1ac 100644 --- a/deltatar/tarfile.py +++ b/deltatar/tarfile.py @@ -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 -- 1.7.1