Commit 371432b9 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Close #17666: Fix reading gzip files with an extra field.

parent 6cb4343d
...@@ -202,7 +202,8 @@ class GzipFile(io.BufferedIOBase): ...@@ -202,7 +202,8 @@ class GzipFile(io.BufferedIOBase):
if flag & FEXTRA: if flag & FEXTRA:
# Read & discard the extra field, if present # Read & discard the extra field, if present
self._read_exact(struct.unpack("<H", self._read_exact(2))) extra_len, = struct.unpack("<H", self._read_exact(2))
self._read_exact(extra_len)
if flag & FNAME: if flag & FNAME:
# Read and discard a null-terminated string containing the filename # Read and discard a null-terminated string containing the filename
while True: while True:
......
...@@ -306,6 +306,13 @@ class TestGzip(unittest.TestCase): ...@@ -306,6 +306,13 @@ class TestGzip(unittest.TestCase):
with gzip.GzipFile(fileobj=io.BytesIO(truncated[:i])) as f: with gzip.GzipFile(fileobj=io.BytesIO(truncated[:i])) as f:
self.assertRaises(EOFError, f.read, 1) self.assertRaises(EOFError, f.read, 1)
def test_read_with_extra(self):
# Gzip data with an extra field
gzdata = (b'\x1f\x8b\x08\x04\xb2\x17cQ\x02\xff'
b'\x05\x00Extra'
b'\x0bI-.\x01\x002\xd1Mx\x04\x00\x00\x00')
with gzip.GzipFile(fileobj=io.BytesIO(gzdata)) as f:
self.assertEqual(f.read(), b'Test')
def test_main(verbose=None): def test_main(verbose=None):
test_support.run_unittest(TestGzip) test_support.run_unittest(TestGzip)
......
...@@ -14,6 +14,8 @@ Core and Builtins ...@@ -14,6 +14,8 @@ Core and Builtins
Library Library
------- -------
- Issue #17666: Fix reading gzip files with an extra field.
- Issue #13150, #17512: sysconfig no longer parses the Makefile and config.h - Issue #13150, #17512: sysconfig no longer parses the Makefile and config.h
files when imported, instead doing it at build time. This makes importing files when imported, instead doing it at build time. This makes importing
sysconfig faster and reduces Python startup time by 20%. sysconfig faster and reduces Python startup time by 20%.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment