summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Gustäbel <lars@gustaebel.de>2010-06-03 09:56:22 (GMT)
committerLars Gustäbel <lars@gustaebel.de>2010-06-03 09:56:22 (GMT)
commit2ee9c6fa506595fd296879823f0b445f0aec26ce (patch)
tree0a9a0fbbf5f071cc0783c9212655b28ad3d5ddc7
parent593e4ca7a5300752c1fe595c22caa859b7fcd5fb (diff)
downloadcpython-2ee9c6fa506595fd296879823f0b445f0aec26ce.zip
cpython-2ee9c6fa506595fd296879823f0b445f0aec26ce.tar.gz
cpython-2ee9c6fa506595fd296879823f0b445f0aec26ce.tar.bz2
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.
-rw-r--r--Lib/tarfile.py2
-rw-r--r--Lib/test/test_tarfile.py6
-rw-r--r--Misc/NEWS3
3 files changed, 9 insertions, 2 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 4b03c28..a54b3b8 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1884,7 +1884,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 = 0L
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 52d6ab3..0d58cda 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -662,10 +662,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("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 cd9da37..9debe2c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -46,6 +46,9 @@ C-API
Library
-------
+- Issue #8833: tarfile created hard link entries with a size field != 0 by
+ mistake.
+
- Issue #1368247: set_charset (and therefore MIMEText) now automatically
encodes a unicode _payload to the output_charset.