gh-98286: handle empty filename in ZipFile/ZipInfo properly (#98346)

effectively code modernization and a meaningful exception.
This commit is contained in:
FC Stegerman 2022-10-29 05:45:46 +00:00 committed by GitHub
parent 0023f51deb
commit 7ea10567af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 2 deletions

View File

@ -553,7 +553,7 @@ def from_file(cls, filename, arcname=None, *, strict_timestamps=True):
def is_dir(self):
"""Return True if this archive member is a directory."""
return self.filename[-1] == '/'
return self.filename.endswith('/')
# ZIP encryption uses the CRC32 one-byte primitive for scrambling some
@ -1731,6 +1731,9 @@ def _extract_member(self, member, targetpath, pwd):
# filter illegal characters on Windows
arcname = self._sanitize_windows_name(arcname, os.path.sep)
if not arcname:
raise ValueError("Empty filename.")
targetpath = os.path.join(targetpath, arcname)
targetpath = os.path.normpath(targetpath)
@ -1820,7 +1823,7 @@ def writestr(self, zinfo_or_arcname, data,
date_time=time.localtime(time.time())[:6])
zinfo.compress_type = self.compression
zinfo._compresslevel = self.compresslevel
if zinfo.filename[-1] == '/':
if zinfo.filename.endswith('/'):
zinfo.external_attr = 0o40775 << 16 # drwxrwxr-x
zinfo.external_attr |= 0x10 # MS-DOS directory flag
else: