1. Armin Rigo
  2. cpython-withatomic

Commits

Martin von Löwis  committed ed6ec00

Patch #1103407: Properly deal with tarfile iterators when untarring
symbolic links on Windows. Fixes #1100429.

  • Participants
  • Parent commits 8198258
  • Branches 2.4

Comments (0)

Files changed (2)

File Lib/tarfile.py

View file
  • Ignore whitespace
         """Construct a TarIter object.
         """
         self.tarfile = tarfile
+        self.index = 0
     def __iter__(self):
         """Return iterator object.
         """
         """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

File Misc/NEWS

View file
  • Ignore whitespace
 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.