summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-01-22 13:54:48 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2013-01-22 13:54:48 (GMT)
commitfc6e8aabf58d748369e0d3b08495ac35a67d2870 (patch)
treede4611799f11cdffa3b38ffb22f36a6dbb887ecf
parentf186911e247b287d555852ce73afb721f8eb79b9 (diff)
downloadcpython-fc6e8aabf58d748369e0d3b08495ac35a67d2870.zip
cpython-fc6e8aabf58d748369e0d3b08495ac35a67d2870.tar.gz
cpython-fc6e8aabf58d748369e0d3b08495ac35a67d2870.tar.bz2
#15546: Fix GzipFile.peek()'s handling of pathological input data.
This is a backport of changeset 8c07ff7f882f.
-rw-r--r--Lib/gzip.py6
-rw-r--r--Misc/NEWS3
2 files changed, 7 insertions, 2 deletions
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 403040b..6aacc9a 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -367,8 +367,10 @@ class GzipFile(io.BufferedIOBase):
if self.fileobj is None:
return b''
try:
- # 1024 is the same buffering heuristic used in read()
- self._read(max(n, 1024))
+ # Ensure that we don't return b"" if we haven't reached EOF.
+ while self.extrasize == 0:
+ # 1024 is the same buffering heuristic used in read()
+ self._read(max(n, 1024))
except EOFError:
pass
offset = self.offset - self.extrastart
diff --git a/Misc/NEWS b/Misc/NEWS
index a46bcc7..c5cbdec 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -466,6 +466,9 @@ Library
- Issue #15424: Add a __sizeof__ implementation for array objects.
Patch by Ludwig Hähne.
+- Issue #15546: Fix handling of pathological input data in the peek() method
+ of the GzipFile class.
+
- Issue #13052: Fix IDLE crashing when replace string in Search/Replace dialog
ended with '\'. Patch by Roger Serwy.