Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop
forever on incomplete input. That caused tarfile.open() to hang when used
with mode 'r' or 'r:bz2' and a fileobj argument that contained no data or
partial bzip2 compressed data.
(backported from r70523)
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 5ad096d..8b477fe 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -594,12 +594,11 @@
b = [self.buf]
x = len(self.buf)
while x < size:
- try:
- raw = self.fileobj.read(self.blocksize)
- data = self.bz2obj.decompress(raw)
- b.append(data)
- except EOFError:
+ raw = self.fileobj.read(self.blocksize)
+ if not raw:
break
+ data = self.bz2obj.decompress(raw)
+ b.append(data)
x += len(data)
self.buf = "".join(b)