#3394: zipfile.writestr doesn't set external attributes, so files are extracted mode 000 on Unix
This commit is contained in:
parent
8c664e8628
commit
5fdfa3e36d
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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?
|
||||||
================================
|
================================
|
||||||
|
|
Loading…
Reference in New Issue