]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #1103407: Properly deal with tarfile iterators when untarring
authorMartin v. Löwis <martin@v.loewis.de>
Thu, 3 Mar 2005 23:15:04 +0000 (23:15 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Thu, 3 Mar 2005 23:15:04 +0000 (23:15 +0000)
symbolic links on Windows. Fixes #1100429.

Lib/tarfile.py
Misc/NEWS

index b85f117c976809f7f8f2df138a4f490d2b11ee91..4a57e3ae4186bff7c4bd609c2f8c7dd60a5848cc 100644 (file)
@@ -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
index b3cabe92705dd3df28f207fac323c3587ed8a666..d5511eb217f624df89661f015022b857f8ad2902 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.