From dd72b3f6b7a3ab497db6134411f1e37ae3f6a5ab Mon Sep 17 00:00:00 2001 From: Nadeem Vawda Date: Sun, 21 Oct 2012 18:15:05 +0200 Subject: Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile(). --- Lib/gzip.py | 4 ++++ Lib/test/test_gzip.py | 7 +++++++ Misc/NEWS | 2 ++ 3 files changed, 13 insertions(+) diff --git a/Lib/gzip.py b/Lib/gzip.py index 8fdac83..2ae7c0c 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -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 # that care about that sort of thing if mode and 'b' not in mode: diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py index a28cd34..9f7bfd2 100644 --- a/Lib/test/test_gzip.py +++ b/Lib/test/test_gzip.py @@ -53,6 +53,13 @@ class TestGzip(unittest.TestCase): d = f.read() 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): # Test that I/O operations on closed GzipFile objects raise a # ValueError, just like the corresponding functions on file objects. diff --git a/Misc/NEWS b/Misc/NEWS index 7e91943..4fa216d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -122,6 +122,8 @@ Core and Builtins 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. Patch by Brent Tubbs. -- cgit v0.12