diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2005-03-03 23:15:04 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2005-03-03 23:15:04 (GMT) |
commit | f05d1c0099fa3f5a46b0d9b0eb709db3bbb6cf2f (patch) | |
tree | acba36ffc123de7fe38d7015534587e3359a27fb | |
parent | eb08d7e0d6e1d03fca2f694da31e795a9d35ff69 (diff) | |
download | cpython-f05d1c0099fa3f5a46b0d9b0eb709db3bbb6cf2f.zip cpython-f05d1c0099fa3f5a46b0d9b0eb709db3bbb6cf2f.tar.gz cpython-f05d1c0099fa3f5a46b0d9b0eb709db3bbb6cf2f.tar.bz2 |
Patch #1103407: Properly deal with tarfile iterators when untarring
symbolic links on Windows. Fixes #1100429.
-rw-r--r-- | Lib/tarfile.py | 19 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 18 insertions, 4 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index b85f117..4a57e3a 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1840,6 +1840,7 @@ class TarIter: """Construct a TarIter object. """ self.tarfile = tarfile + self.index = 0 def __iter__(self): """Return iterator object. """ @@ -1848,10 +1849,20 @@ class TarIter: """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 @@ -40,6 +40,9 @@ Extension Modules Library ------- +- Patch #1103407: Properly deal with tarfile iterators when untarring + symbolic links on Windows. + - Patch #1117454: Remove code to special-case cookies without values in LWPCookieJar. |