summaryrefslogtreecommitdiffstats
path: root/Lib/tarfile.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2005-08-24 06:06:52 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2005-08-24 06:06:52 (GMT)
commitbc3b06087cf1907d1dfee6e21885a9ccfbf11af3 (patch)
tree86854ea8d1390fcbe52c69b04450afc7962acb9f /Lib/tarfile.py
parent94ac197531fdc7f358e737dec55cd7158cbdd815 (diff)
downloadcpython-bc3b06087cf1907d1dfee6e21885a9ccfbf11af3.zip
cpython-bc3b06087cf1907d1dfee6e21885a9ccfbf11af3.tar.gz
cpython-bc3b06087cf1907d1dfee6e21885a9ccfbf11af3.tar.bz2
Patch #1262036: Make tarfile name absolute. Fixes #1257255.
Will backport to 2.4.
Diffstat (limited to 'Lib/tarfile.py')
-rw-r--r--Lib/tarfile.py27
1 files changed, 7 insertions, 20 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index e4c5863..9c25962 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -849,7 +849,7 @@ class TarFile(object):
can be determined, `mode' is overridden by `fileobj's mode.
`fileobj' is not closed, when TarFile is closed.
"""
- self.name = name
+ self.name = os.path.abspath(name)
if len(mode) > 1 or mode not in "raw":
raise ValueError, "mode must be 'r', 'a' or 'w'"
@@ -861,7 +861,7 @@ class TarFile(object):
self._extfileobj = False
else:
if self.name is None and hasattr(fileobj, "name"):
- self.name = fileobj.name
+ self.name = os.path.abspath(fileobj.name)
if hasattr(fileobj, "mode"):
self.mode = fileobj.mode
self._extfileobj = True
@@ -998,22 +998,18 @@ class TarFile(object):
raise CompressionError, "gzip module is not available"
pre, ext = os.path.splitext(name)
- pre = os.path.basename(pre)
if ext == ".tgz":
ext = ".tar"
if ext == ".gz":
ext = ""
- tarname = pre + ext
+ tarname = os.path.basename(pre + ext)
if fileobj is None:
fileobj = file(name, mode + "b")
- if mode != "r":
- name = tarname
-
try:
- t = cls.taropen(tarname, mode,
- gzip.GzipFile(name, mode, compresslevel, fileobj)
+ t = cls.taropen(name, mode,
+ gzip.GzipFile(tarname, mode, compresslevel, fileobj)
)
except IOError:
raise ReadError, "not a gzip file"
@@ -1033,19 +1029,11 @@ class TarFile(object):
except ImportError:
raise CompressionError, "bz2 module is not available"
- pre, ext = os.path.splitext(name)
- pre = os.path.basename(pre)
- if ext == ".tbz2":
- ext = ".tar"
- if ext == ".bz2":
- ext = ""
- tarname = pre + ext
-
if fileobj is not None:
raise ValueError, "no support for external file objects"
try:
- t = cls.taropen(tarname, mode, bz2.BZ2File(name, mode, compresslevel=compresslevel))
+ t = cls.taropen(name, mode, bz2.BZ2File(name, mode, compresslevel=compresslevel))
except IOError:
raise ReadError, "not a bzip2 file"
t._extfileobj = False
@@ -1250,8 +1238,7 @@ class TarFile(object):
arcname = name
# Skip if somebody tries to archive the archive...
- if self.name is not None \
- and os.path.abspath(name) == os.path.abspath(self.name):
+ if self.name is not None and os.path.samefile(name, self.name):
self._dbg(2, "tarfile: Skipped %r" % name)
return