diff -r 657caf5d3eb1 Lib/tarfile.py --- a/Lib/tarfile.py Mon Dec 03 16:13:48 2012 +0200 +++ b/Lib/tarfile.py Mon Dec 03 20:17:23 2012 +0000 @@ -2397,16 +2397,18 @@ # 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