From: Philipp Gesang Date: Tue, 8 Aug 2017 08:48:31 +0000 (+0200) Subject: force tarfile reopen after bad read in deltatar X-Git-Tag: v2.2~7^2~93 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=c6226e2a750e69c0cf52fa46bcab8912ff2ca284;p=python-delta-tar force tarfile reopen after bad read in deltatar Closing the tarfile after an unreadable object was encountered causes the stream to be reopened for the next read. Otherwise, the corrupt object is already buffered and tarfile would continue to seek inside the bad data. --- diff --git a/deltatar/deltatar.py b/deltatar/deltatar.py index 2d48c39..b2d483f 100644 --- a/deltatar/deltatar.py +++ b/deltatar/deltatar.py @@ -1806,7 +1806,14 @@ class RestoreHelper(object): # seek tarfile if needed offset = file_data.get('offset', -1) if index_data['tarobj']: - member = index_data['tarobj'].__iter__().__next__() + try: + member = index_data['tarobj'].__iter__().__next__() + except tarfile.ReadError as exn: + # Possibly corrupted archive; may still be recoverable + # if offsets did not change. + index_data['tarobj'].close() + index_data['tarobj'] = None + raise if not member or member.path != file_data['path']: # force a seek and reopen index_data['tarobj'].close()