Commit dd72b3f6 authored by Nadeem Vawda's avatar Nadeem Vawda

Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile().

parent c3084834
...@@ -81,6 +81,10 @@ class GzipFile(io.BufferedIOBase): ...@@ -81,6 +81,10 @@ class GzipFile(io.BufferedIOBase):
""" """
# Make sure we don't inadvertently enable universal newlines on the
# underlying file object - in read mode, this causes data corruption.
if mode:
mode = mode.replace('U', '')
# guarantee the file is opened in binary mode on platforms # guarantee the file is opened in binary mode on platforms
# that care about that sort of thing # that care about that sort of thing
if mode and 'b' not in mode: if mode and 'b' not in mode:
......
...@@ -53,6 +53,13 @@ class TestGzip(unittest.TestCase): ...@@ -53,6 +53,13 @@ class TestGzip(unittest.TestCase):
d = f.read() d = f.read()
self.assertEqual(d, data1*50) self.assertEqual(d, data1*50)
def test_read_universal_newlines(self):
# Issue #5148: Reading breaks when mode contains 'U'.
self.test_write()
with gzip.GzipFile(self.filename, 'rU') as f:
d = f.read()
self.assertEqual(d, data1*50)
def test_io_on_closed_object(self): def test_io_on_closed_object(self):
# Test that I/O operations on closed GzipFile objects raise a # Test that I/O operations on closed GzipFile objects raise a
# ValueError, just like the corresponding functions on file objects. # ValueError, just like the corresponding functions on file objects.
......
...@@ -122,6 +122,8 @@ Core and Builtins ...@@ -122,6 +122,8 @@ Core and Builtins
Library Library
------- -------
- Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile().
- Issue #16220: wsgiref now always calls close() on an iterable response. - Issue #16220: wsgiref now always calls close() on an iterable response.
Patch by Brent Tubbs. Patch by Brent Tubbs.
......
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