From: Lars Gustäbel Date: Thu, 3 Jun 2010 10:15:18 +0000 (+0000) Subject: Merged revisions 81665 via svnmerge from X-Git-Tag: v3.1.3rc1~680 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=547f808e266ee29deeabef9259dc81c3b17c9b34;p=python Merged revisions 81665 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r81665 | lars.gustaebel | 2010-06-03 12:11:52 +0200 (Thu, 03 Jun 2010) | 11 lines Merged revisions 81663 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r81663 | lars.gustaebel | 2010-06-03 11:56:22 +0200 (Thu, 03 Jun 2010) | 4 lines Issue #8833: tarfile created hard link entries with a size field != 0 by mistake. The associated testcase did not expose this bug because it was broken too. ........ ................ --- diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 125d95dd8a..bc608e9d79 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1857,7 +1857,7 @@ class TarFile(object): tarinfo.mode = stmd tarinfo.uid = statres.st_uid tarinfo.gid = statres.st_gid - if stat.S_ISREG(stmd): + if type == REGTYPE: tarinfo.size = statres.st_size else: tarinfo.size = 0 diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 1a556eb0f5..124f0e97f8 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -616,10 +616,14 @@ class WriteTest(WriteTestBase): if hasattr(os, "link"): link = os.path.join(TEMPDIR, "link") target = os.path.join(TEMPDIR, "link_target") - open(target, "wb").close() + fobj = open(target, "wb") + fobj.write(b"aaa") + fobj.close() os.link(target, link) try: tar = tarfile.open(tmpname, self.mode) + # Record the link target in the inodes list. + tar.gettarinfo(target) tarinfo = tar.gettarinfo(link) self.assertEqual(tarinfo.size, 0) finally: diff --git a/Misc/NEWS b/Misc/NEWS index ea7e5034a0..91d59b1828 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -54,6 +54,9 @@ C-API Library ------- +- Issue #8833: tarfile created hard link entries with a size field != 0 by + mistake. + - Charset.body_encode now correctly handles base64 encoding by encoding with the output_charset before calling base64mime.encode. Passes the tests from 2.x issue 1368247.