Commit 5323ed34 authored by Benjamin Peterson's avatar Benjamin Peterson

Issue #25624: ZipFile now always writes a ZIP_STORED header for directory...

Issue #25624: ZipFile now always writes a ZIP_STORED header for directory entries. Patch by Dingyuan Wang.
parent 85592c9c
...@@ -511,6 +511,29 @@ class TestShutil(unittest.TestCase): ...@@ -511,6 +511,29 @@ class TestShutil(unittest.TestCase):
names2 = zf.namelist() names2 = zf.namelist()
self.assertEqual(sorted(names), sorted(names2)) self.assertEqual(sorted(names), sorted(names2))
@unittest.skipUnless(zlib, "Requires zlib")
@unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
@unittest.skipUnless(find_executable('unzip'),
'Need the unzip command to run')
def test_unzip_zipfile(self):
root_dir, base_dir = self._create_files()
base_name = os.path.join(self.mkdtemp(), 'archive')
archive = make_archive(base_name, 'zip', root_dir, base_dir)
# check if ZIP file was created
self.assertEqual(archive, base_name + '.zip')
self.assertTrue(os.path.isfile(archive))
# now check the ZIP file using `unzip -t`
zip_cmd = ['unzip', '-t', archive]
with support.change_cwd(root_dir):
try:
subprocess.check_output(zip_cmd, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as exc:
details = exc.output
msg = "{}\n\n**Unzip Output**\n{}"
self.fail(msg.format(exc, details))
def test_make_archive(self): def test_make_archive(self):
tmpdir = self.mkdtemp() tmpdir = self.mkdtemp()
base_name = os.path.join(tmpdir, 'archive') base_name = os.path.join(tmpdir, 'archive')
......
...@@ -1134,7 +1134,9 @@ class ZipFile(object): ...@@ -1134,7 +1134,9 @@ class ZipFile(object):
arcname += '/' arcname += '/'
zinfo = ZipInfo(arcname, date_time) zinfo = ZipInfo(arcname, date_time)
zinfo.external_attr = (st[0] & 0xFFFF) << 16L # Unix attributes zinfo.external_attr = (st[0] & 0xFFFF) << 16L # Unix attributes
if compress_type is None: if isdir:
zinfo.compress_type = ZIP_STORED
elif compress_type is None:
zinfo.compress_type = self.compression zinfo.compress_type = self.compression
else: else:
zinfo.compress_type = compress_type zinfo.compress_type = compress_type
......
...@@ -1443,6 +1443,7 @@ Richard Walker ...@@ -1443,6 +1443,7 @@ Richard Walker
Larry Wall Larry Wall
Kevin Walzer Kevin Walzer
Rodrigo Steinmuller Wanderley Rodrigo Steinmuller Wanderley
Dingyuan Wang
Ke Wang Ke Wang
Greg Ward Greg Ward
Tom Wardill Tom Wardill
......
...@@ -13,6 +13,9 @@ Core and Builtins ...@@ -13,6 +13,9 @@ Core and Builtins
Library Library
------- -------
- Issue #25624: ZipFile now always writes a ZIP_STORED header for directory
entries. Patch by Dingyuan Wang.
What's New in Python 2.7.11 release candidate 1? What's New in Python 2.7.11 release candidate 1?
================================================ ================================================
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment