Patch #1103407: Properly deal with tarfile iterators when untarring

symbolic links on Windows. Fixes #1100429. Will backport to 2.4.
This commit is contained in:
Martin v. Löwis 2005-03-03 23:12:42 +00:00
parent c9f852512c
commit 637431bf14
2 changed files with 18 additions and 4 deletions

View File

@ -1851,6 +1851,7 @@ def __init__(self, tarfile):
"""Construct a TarIter object.
"""
self.tarfile = tarfile
self.index = 0
def __iter__(self):
"""Return iterator object.
"""
@ -1859,10 +1860,20 @@ def next(self):
"""Return the next item using TarFile's next() method.
When all members have been read, set TarFile as _loaded.
"""
tarinfo = self.tarfile.next()
if not tarinfo:
self.tarfile._loaded = True
raise StopIteration
# Fix for SF #1100429: Under rare circumstances it can
# happen that getmembers() is called during iteration,
# which will cause TarIter to stop prematurely.
if not self.tarfile._loaded:
tarinfo = self.tarfile.next()
if not tarinfo:
self.tarfile._loaded = True
raise StopIteration
else:
try:
tarinfo = self.tarfile.members[self.index]
except IndexError:
raise StopIteration
self.index += 1
return tarinfo
# Helper classes for sparse file support

View File

@ -72,6 +72,9 @@ Extension Modules
Library
-------
- Patch #1103407: Properly deal with tarfile iterators when untarring
symbolic links on Windows.
- Patch #645894: Use getrusage for computing the time consumption in
profile.py if available.