summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_tarfile.py
diff options
context:
space:
mode:
authorLars Gustäbel <lars@gustaebel.de>2015-07-06 07:29:41 (GMT)
committerLars Gustäbel <lars@gustaebel.de>2015-07-06 07:29:41 (GMT)
commite12aa62d689f435b9b75cde51e432d997646d5f9 (patch)
treec4d9a6888955dd0a184c55de513d41a871228997 /Lib/test/test_tarfile.py
parent53ecc58bd9da21989ae1811f97248b40e028ccd9 (diff)
parent0357268d96d4ff3546cfd89f594a5630a3adf747 (diff)
downloadcpython-e12aa62d689f435b9b75cde51e432d997646d5f9.zip
cpython-e12aa62d689f435b9b75cde51e432d997646d5f9.tar.gz
cpython-e12aa62d689f435b9b75cde51e432d997646d5f9.tar.bz2
Merge with 3.4: Issue #24259: tarfile now raises a ReadError if an archive is truncated inside a data segment.
Diffstat (limited to 'Lib/test/test_tarfile.py')
-rw-r--r--Lib/test/test_tarfile.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 0f03c73..57cddb2 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -364,6 +364,29 @@ class CommonReadTest(ReadTest):
finally:
tar.close()
+ def test_premature_end_of_archive(self):
+ for size in (512, 600, 1024, 1200):
+ with tarfile.open(tmpname, "w:") as tar:
+ t = tarfile.TarInfo("foo")
+ t.size = 1024
+ tar.addfile(t, io.BytesIO(b"a" * 1024))
+
+ with open(tmpname, "r+b") as fobj:
+ fobj.truncate(size)
+
+ with tarfile.open(tmpname) as tar:
+ with self.assertRaisesRegex(tarfile.ReadError, "unexpected end of data"):
+ for t in tar:
+ pass
+
+ with tarfile.open(tmpname) as tar:
+ t = tar.next()
+
+ with self.assertRaisesRegex(tarfile.ReadError, "unexpected end of data"):
+ tar.extract(t, TEMPDIR)
+
+ with self.assertRaisesRegex(tarfile.ReadError, "unexpected end of data"):
+ tar.extractfile(t).read()
class MiscReadTestBase(CommonReadTest):
def requires_name_attribute(self):