diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2005-10-28 05:52:22 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2005-10-28 05:52:22 (GMT) |
commit | f3396542806e9c6d1dfafda5d1e53296d3d1af09 (patch) | |
tree | 20ddb14f9ad9bfeb9c00cf5eb89f31ee23543259 /Lib/tarfile.py | |
parent | 466e5b336ea68293abbda84c3e99d64708043443 (diff) | |
download | cpython-f3396542806e9c6d1dfafda5d1e53296d3d1af09.zip cpython-f3396542806e9c6d1dfafda5d1e53296d3d1af09.tar.gz cpython-f3396542806e9c6d1dfafda5d1e53296d3d1af09.tar.bz2 |
Patch #1338314, Bug #1336623: fix tarfile so it can extract
REGTYPE directories from tarfiles written by old programs.
Will backport.
Diffstat (limited to 'Lib/tarfile.py')
-rw-r--r-- | Lib/tarfile.py | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index c86248c..0b3d477 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -739,6 +739,11 @@ class TarInfo(object): tarinfo.devmajor = tarinfo.devmajor = 0 tarinfo.prefix = buf[345:500] + # Some old tar programs represent a directory as a regular + # file with a trailing slash. + if tarinfo.isreg() and tarinfo.name.endswith("/"): + tarinfo.type = DIRTYPE + # The prefix field is used for filenames > 100 in # the POSIX standard. # name = prefix + '/' + name @@ -746,7 +751,7 @@ class TarInfo(object): tarinfo.name = normpath(os.path.join(nts(tarinfo.prefix), tarinfo.name)) # Directory names should have a '/' at the end. - if tarinfo.isdir() and tarinfo.name[-1:] != "/": + if tarinfo.isdir(): tarinfo.name += "/" return tarinfo @@ -1716,10 +1721,6 @@ class TarFile(object): # Skip the following data blocks. self.offset += self._block(tarinfo.size) - if tarinfo.isreg() and tarinfo.name[:-1] == "/": - # some old tar programs don't know DIRTYPE - tarinfo.type = DIRTYPE - self.members.append(tarinfo) return tarinfo |