<div id="yiv3620984969"><div id="yui_3_16_0_ym19_1_1526416851225_50923"><div style="color:#000;background-color:#fff;font-family:標楷體, dfkai-sb;font-size:16px;" id="yui_3_16_0_ym19_1_1526416851225_50922"><div><span></span></div><div class="yiv3620984969qtdSeparateBR" id="yui_3_16_0_ym19_1_1526416851225_50921"><br><br></div><div class="yiv3620984969yahoo_quoted" style="display:block;">  <div style="font-family:標楷體, dfkai-sb;font-size:16px;"> <div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif;font-size:16px;"> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1"> <b><span style="font-weight:bold;">From:</span></b> Serhiy Storchaka <webhook-mailer@python.org><br> <b><span style="font-weight:bold;">To:</span></b> python-checkins@python.org <br> <b><span style="font-weight:bold;">Sent:</span></b> Wednesday, 9 May 2018, 10:14<br> <b><span style="font-weight:bold;">Subject:</span></b> [Python-checkins] bpo-33038: Fix gzip.GzipFile for file objects with a non-string name attribute. (GH-6095)<br> </font> </div> <div class="yiv3620984969y_msg_container"><br><div dir="ltr"><a rel="nofollow" target="_blank" href="https://github.com/python/cpython/commit/afe5f633e49e0e873d42088ae56819609c803ba0">https://github.com/python/cpython/commit/afe5f633e49e0e873d42088ae56819609c803ba0</a><br></div><div dir="ltr">commit: afe5f633e49e0e873d42088ae56819609c803ba0<br></div><div dir="ltr">branch: 2.7<br></div><div dir="ltr">author: Bo Bayles <<a rel="nofollow" ymailto="mailto:bbayles@gmail.com" target="_blank" href="mailto:bbayles@gmail.com">bbayles@gmail.com</a>><br></div><div dir="ltr">committer: Serhiy Storchaka <<a rel="nofollow" ymailto="mailto:storchaka@gmail.com" target="_blank" href="mailto:storchaka@gmail.com">storchaka@gmail.com</a>><br></div><div dir="ltr">date: 2018-05-09T13:14:40+03:00<br></div><div dir="ltr">summary:<br></div><div dir="ltr"><br></div><div dir="ltr">bpo-33038: Fix gzip.GzipFile for file objects with a non-string name attribute. (GH-6095)<br></div><div dir="ltr"><br></div><div dir="ltr">files:<br></div><div dir="ltr">A Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst<br></div><div dir="ltr">M Lib/gzip.py<br></div><div dir="ltr">M Lib/test/test_gzip.py<br></div><div dir="ltr">M Misc/ACKS<br></div><div dir="ltr"><br></div><div dir="ltr">diff --git a/Lib/gzip.py b/Lib/gzip.py<br></div><div dir="ltr">index 07c6db493b0b..76ace394f482 100644<br></div><div dir="ltr">--- a/Lib/gzip.py<br></div><div dir="ltr">+++ b/Lib/gzip.py<br></div><div dir="ltr">@@ -95,9 +95,8 @@ def __init__(self, filename=None, mode=None,<br></div><div dir="ltr">         if filename is None:<br></div><div dir="ltr">             # Issue #13781: os.fdopen() creates a fileobj with a bogus name<br></div><div dir="ltr">             # attribute. Avoid saving this in the gzip header's filename field.<br></div><div dir="ltr">-            if hasattr(fileobj, 'name') and fileobj.name != '<fdopen>':<br></div><div dir="ltr">-                filename = fileobj.name<br></div><div dir="ltr">-            else:<br></div><div dir="ltr">+            filename = getattr(fileobj, 'name', '')<br></div><div dir="ltr">+            if not isinstance(filename, basestring) or filename == '<fdopen>':<br></div><div dir="ltr">                 filename = ''<br></div><div dir="ltr">         if mode is None:<br></div><div dir="ltr">             if hasattr(fileobj, 'mode'): mode = fileobj.mode<br></div><div dir="ltr">diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py<br></div><div dir="ltr">index 902d93fe043f..cdb1af5c3d13 100644<br></div><div dir="ltr">--- a/Lib/test/test_gzip.py<br></div><div dir="ltr">+++ b/Lib/test/test_gzip.py<br></div><div dir="ltr">@@ -6,6 +6,7 @@<br></div><div dir="ltr"> import os<br></div><div dir="ltr"> import io<br></div><div dir="ltr"> import struct<br></div><div dir="ltr">+import tempfile<br></div><div dir="ltr"> gzip = test_support.import_module('gzip')<br></div><div dir="ltr"> <br></div><div dir="ltr"> data1 = """  int length=DEFAULTALLOC, err = Z_OK;<br></div><div dir="ltr">@@ -331,6 +332,12 @@ def test_fileobj_from_fdopen(self):<br></div><div dir="ltr">             with gzip.GzipFile(fileobj=f, mode="w") as g:<br></div><div dir="ltr">                 self.assertEqual(g.name, "")<br></div><div dir="ltr"> <br></div><div dir="ltr">+    def test_fileobj_from_io_open(self):<br></div><div dir="ltr">+        fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT)<br></div><div dir="ltr">+        with io.open(fd, "wb") as f:<br></div><div dir="ltr">+            with gzip.GzipFile(fileobj=f, mode="w") as g:<br></div><div dir="ltr">+                self.assertEqual(g.name, "")<br></div><div dir="ltr">+<br></div><div dir="ltr">     def test_fileobj_mode(self):<br></div><div dir="ltr">         gzip.GzipFile(self.filename, "wb").close()<br></div><div dir="ltr">         with open(self.filename, "r+b") as f:<br></div><div dir="ltr">@@ -359,6 +366,14 @@ def test_read_with_extra(self):<br></div><div dir="ltr">         with gzip.GzipFile(fileobj=io.BytesIO(gzdata)) as f:<br></div><div dir="ltr">             self.assertEqual(f.read(), b'Test')<br></div><div dir="ltr"> <br></div><div dir="ltr">+    def test_fileobj_without_name(self):<br></div><div dir="ltr">+        # Issue #33038: GzipFile should not assume that file objects that have<br></div><div dir="ltr">+        # a .name attribute use a non-None value.<br></div><div dir="ltr">+        with tempfile.SpooledTemporaryFile() as f:<br></div><div dir="ltr">+            with gzip.GzipFile(fileobj=f, mode='wb') as archive:<br></div><div dir="ltr">+                archive.write(b'data')<br></div><div dir="ltr">+                self.assertEqual(archive.name, '')<br></div><div dir="ltr">+<br></div><div dir="ltr"> def test_main(verbose=None):<br></div><div dir="ltr">     test_support.run_unittest(TestGzip)<br></div><div dir="ltr"> <br></div><div dir="ltr">diff --git a/Misc/ACKS b/Misc/ACKS<br></div><div dir="ltr">index 580b0c5bf76d..458f31e6a6b7 100644<br></div><div dir="ltr">--- a/Misc/ACKS<br></div><div dir="ltr">+++ b/Misc/ACKS<br></div><div dir="ltr">@@ -94,6 +94,7 @@ Michael R Bax<br></div><div dir="ltr"> Anthony Baxter<br></div><div dir="ltr"> Mike Bayer<br></div><div dir="ltr"> Samuel L. Bayer<br></div><div dir="ltr">+Bo Bayles<br></div><div dir="ltr"> Donald Beaudry<br></div><div dir="ltr"> David Beazley<br></div><div dir="ltr"> Carlo Beccarini<br></div><div dir="ltr">diff --git a/Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst b/Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst<br></div><div dir="ltr">new file mode 100644<br></div><div dir="ltr">index 000000000000..22d394b85ab7<br></div><div dir="ltr">--- /dev/null<br></div><div dir="ltr">+++ b/Misc/NEWS.d/next/Library/2018-03-10-20-14-36.bpo-33038.yA6CP5.rst<br></div><div dir="ltr">@@ -0,0 +1,2 @@<br></div><div dir="ltr">+gzip.GzipFile no longer produces an AttributeError exception when used with<br></div><div dir="ltr">+a file object with a non-string name attribute. Patch by Bo Bayles.<br></div><div dir="ltr"><br></div><div dir="ltr">_______________________________________________<br></div><div dir="ltr">Python-checkins mailing list<br></div><div dir="ltr"><a rel="nofollow" ymailto="mailto:Python-checkins@python.org" target="_blank" href="mailto:Python-checkins@python.org">Python-checkins@python.org</a><br></div><div dir="ltr"><a rel="nofollow" target="_blank" href="https://mail.python.org/mailman/listinfo/python-checkins">https://mail.python.org/mailman/listinfo/python-checkins</a><br></div><br><br></div> </div> </div>  </div></div></div></div>_______________________________________________<br>Python-Dev mailing list<br><a ymailto="mailto:Python-Dev@python.org" href="mailto:Python-Dev@python.org">Python-Dev@python.org</a><br><a href="https://mail.python.org/mailman/listinfo/python-dev" target="_blank">https://mail.python.org/mailman/listinfo/python-dev</a><br>Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/nataliemorrisonxm980xm%40yahoo.com" target="_blank">https://mail.python.org/mailman/options/python-dev/nataliemorrisonxm980xm%40yahoo.com</a><br>