#3394: zipfile.writestr doesn't set external attributes, so files are extracted mode 000 on Unix

This commit is contained in:
Antoine Pitrou 2008-07-25 19:42:26 +00:00
parent 8c664e8628
commit 5fdfa3e36d
3 changed files with 18 additions and 0 deletions

View File

@ -372,6 +372,19 @@ class TestsWithSourceFile(unittest.TestCase):
# remove the test file subdirectories # remove the test file subdirectories
shutil.rmtree(os.path.join(os.getcwd(), 'ziptest2dir')) 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): def tearDown(self):
os.remove(TESTFN) os.remove(TESTFN)
os.remove(TESTFN2) os.remove(TESTFN2)

View File

@ -1064,6 +1064,7 @@ class ZipFile:
zinfo = ZipInfo(filename=zinfo_or_arcname, zinfo = ZipInfo(filename=zinfo_or_arcname,
date_time=time.localtime(time.time())[:6]) date_time=time.localtime(time.time())[:6])
zinfo.compress_type = self.compression zinfo.compress_type = self.compression
zinfo.external_attr = 0600 << 16
else: else:
zinfo = zinfo_or_arcname zinfo = zinfo_or_arcname

View File

@ -44,6 +44,10 @@ Library
- Deprecate the sunaudio module for removal in Python 3.0. - 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? What's New in Python 2.6 beta 2?
================================ ================================