Commit 637431bf authored by Martin v. Löwis's avatar Martin v. Löwis

Patch #1103407: Properly deal with tarfile iterators when untarring

symbolic links on Windows. Fixes #1100429. Will backport to 2.4.
parent c9f85251
...@@ -1851,6 +1851,7 @@ class TarIter: ...@@ -1851,6 +1851,7 @@ class TarIter:
"""Construct a TarIter object. """Construct a TarIter object.
""" """
self.tarfile = tarfile self.tarfile = tarfile
self.index = 0
def __iter__(self): def __iter__(self):
"""Return iterator object. """Return iterator object.
""" """
...@@ -1859,10 +1860,20 @@ class TarIter: ...@@ -1859,10 +1860,20 @@ class TarIter:
"""Return the next item using TarFile's next() method. """Return the next item using TarFile's next() method.
When all members have been read, set TarFile as _loaded. When all members have been read, set TarFile as _loaded.
""" """
tarinfo = self.tarfile.next() # Fix for SF #1100429: Under rare circumstances it can
if not tarinfo: # happen that getmembers() is called during iteration,
self.tarfile._loaded = True # which will cause TarIter to stop prematurely.
raise StopIteration 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 return tarinfo
# Helper classes for sparse file support # Helper classes for sparse file support
......
...@@ -72,6 +72,9 @@ Extension Modules ...@@ -72,6 +72,9 @@ Extension Modules
Library Library
------- -------
- Patch #1103407: Properly deal with tarfile iterators when untarring
symbolic links on Windows.
- Patch #645894: Use getrusage for computing the time consumption in - Patch #645894: Use getrusage for computing the time consumption in
profile.py if available. profile.py if available.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment