[Python-checkins] python/dist/src/Lib tarfile.py,1.21,1.21.2.1
loewis at users.sourceforge.net
loewis at users.sourceforge.net
Fri Mar 4 00:15:36 CET 2005
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18416/Lib
Modified Files:
Tag: release24-maint
tarfile.py
Log Message:
Patch #1103407: Properly deal with tarfile iterators when untarring
symbolic links on Windows. Fixes #1100429.
Index: tarfile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/tarfile.py,v
retrieving revision 1.21
retrieving revision 1.21.2.1
diff -u -d -r1.21 -r1.21.2.1
--- tarfile.py 20 Oct 2004 11:48:42 -0000 1.21
+++ tarfile.py 3 Mar 2005 23:15:03 -0000 1.21.2.1
@@ -1840,6 +1840,7 @@
"""Construct a TarIter object.
"""
self.tarfile = tarfile
+ self.index = 0
def __iter__(self):
"""Return iterator object.
"""
@@ -1848,10 +1849,20 @@
"""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
More information about the Python-checkins
mailing list