From: Antoine Pitrou Date: Fri, 25 Jul 2008 19:42:26 +0000 (+0000) Subject: #3394: zipfile.writestr doesn't set external attributes, so files are extracted mode... X-Git-Tag: v2.6b3~229 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5fdfa3e36d08e8627cd57d2f9653e1ec634f8355;p=thirdparty%2FPython%2Fcpython.git #3394: zipfile.writestr doesn't set external attributes, so files are extracted mode 000 on Unix --- diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 90ac4f6f6ee5..5e993821ab23 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -372,6 +372,19 @@ class TestsWithSourceFile(unittest.TestCase): # remove the test file subdirectories shutil.rmtree(os.path.join(os.getcwd(), 'ziptest2dir')) + def zip_test_writestr_permissions(self, f, compression): + # Make sure that writestr creates files with mode 0600, + # when it is passed a name rather than a ZipInfo instance. + + self.makeTestArchive(f, compression) + zipfp = zipfile.ZipFile(f, "r") + zinfo = zipfp.getinfo('strfile') + self.assertEqual(zinfo.external_attr, 0600 << 16) + + def test_writestr_permissions(self): + for f in (TESTFN2, TemporaryFile(), StringIO()): + self.zip_test_writestr_permissions(f, zipfile.ZIP_STORED) + def tearDown(self): os.remove(TESTFN) os.remove(TESTFN2) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index ddeaa18c1425..609dea3f273d 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -1064,6 +1064,7 @@ class ZipFile: zinfo = ZipInfo(filename=zinfo_or_arcname, date_time=time.localtime(time.time())[:6]) zinfo.compress_type = self.compression + zinfo.external_attr = 0600 << 16 else: zinfo = zinfo_or_arcname diff --git a/Misc/NEWS b/Misc/NEWS index 87ef02d3256b..995c7c3b4247 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -44,6 +44,10 @@ Library - Deprecate the sunaudio module for removal in Python 3.0. +- Issue #3394: zipfile.writestr sets external attributes when passed a + file name rather than a ZipInfo instance, so files are extracted with + mode 0600 rather than 000 under Unix. + What's New in Python 2.6 beta 2? ================================