Patch #1014992: Never return more than a line from readline.
Will backport to 2.3.
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 2d5bf64..06d8590 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -509,14 +509,12 @@
             nl = min(nl, size)
         else:
             size -= len(self.linebuffer)
-            while nl < 0:
+            while (nl < 0 and size > 0):
                 buf = self.read(min(size, 100))
                 if not buf:
                     break
                 self.linebuffer += buf
                 size -= len(buf)
-                if size <= 0:
-                    break
                 nl = self.linebuffer.find("\n")
             if nl == -1:
                 s = self.linebuffer