mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #16601: Restarting iteration over tarfile no more continues from where
it left off. Patch by Michael Birtwell.
This commit is contained in:
commit
b3c5d85680
4 changed files with 19 additions and 5 deletions
|
@ -2397,16 +2397,18 @@ class TarIter:
|
|||
# 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:
|
||||
|
||||
if self.index == 0 and self.tarfile.firstmember is not None:
|
||||
tarinfo = self.tarfile.next()
|
||||
elif self.index < len(self.tarfile.members):
|
||||
tarinfo = self.tarfile.members[self.index]
|
||||
elif 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
|
||||
raise StopIteration
|
||||
self.index += 1
|
||||
return tarinfo
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue