From: Nadeem Vawda Date: Sun, 21 Oct 2012 16:15:05 +0000 (+0200) Subject: Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile(). X-Git-Tag: v2.7.4rc1~463 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dd72b3f6b7a3ab497db6134411f1e37ae3f6a5ab;p=thirdparty%2FPython%2Fcpython.git Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile(). --- diff --git a/Lib/gzip.py b/Lib/gzip.py index 8fdac8397d4d..2ae7c0cffe38 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 a28cd34b0ca9..9f7bfd2ed557 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 7e91943ceae2..4fa216d55a6d 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.