gh-112795: Allow / folder in a zipfile (#112932)

Allow extraction (no-op) of a "/" folder in a zipfile, they are commonly added by some archive creation tools.

Co-authored-by: Erlend E. Aasland <erlend@python.org>
Co-authored-by: Gregory P. Smith <greg@krypto.org>
This commit is contained in:
AN Long 2024-01-07 09:14:18 +08:00 committed by GitHub
parent 84d1f76092
commit 541c5dbb81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 1 deletions

View file

@ -577,3 +577,15 @@ class TestPath(unittest.TestCase):
zipfile.Path(alpharep)
with self.assertRaises(KeyError):
alpharep.getinfo('does-not-exist')
def test_root_folder_in_zipfile(self):
"""
gh-112795: Some tools or self constructed codes will add '/' folder to
the zip file, this is a strange behavior, but we should support it.
"""
in_memory_file = io.BytesIO()
zf = zipfile.ZipFile(in_memory_file, "w")
zf.mkdir('/')
zf.writestr('./a.txt', 'aaa')
tmpdir = pathlib.Path(self.fixtures.enter_context(temp_dir()))
zf.extractall(tmpdir)