mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-68164: Set the "regular file" bit in zipfile's writestr
This commit is contained in:
parent
8d490b3687
commit
781881b7f0
3 changed files with 8 additions and 6 deletions
|
@ -496,7 +496,7 @@ class StoredTestsWithSourceFile(AbstractTestsWithSourceFile,
|
|||
self.make_test_archive(f, compression)
|
||||
with zipfile.ZipFile(f, "r") as zipfp:
|
||||
zinfo = zipfp.getinfo('strfile')
|
||||
self.assertEqual(zinfo.external_attr, 0o600 << 16)
|
||||
self.assertEqual(zinfo.external_attr, 0o100600 << 16)
|
||||
|
||||
zinfo2 = zipfp.getinfo('written-open-w')
|
||||
self.assertEqual(zinfo2.external_attr, 0o600 << 16)
|
||||
|
@ -2271,8 +2271,8 @@ class OtherTests(unittest.TestCase):
|
|||
zi = zipfile.ZipInfo(base_filename)._for_archive(zf)
|
||||
self.assertEqual(zi.compress_level, 1)
|
||||
self.assertEqual(zi.compress_type, zipfile.ZIP_STORED)
|
||||
# ?rw- --- ---
|
||||
filemode = stat.S_IRUSR | stat.S_IWUSR
|
||||
# - rw- --- ---
|
||||
filemode = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR
|
||||
# filemode is stored as the highest 16 bits of external_attr
|
||||
self.assertEqual(zi.external_attr >> 16, filemode)
|
||||
self.assertEqual(zi.external_attr & 0xFF, 0) # no MS-DOS flag
|
||||
|
|
|
@ -630,10 +630,10 @@ class ZipInfo:
|
|||
self.compress_type = archive.compression
|
||||
self.compress_level = archive.compresslevel
|
||||
if self.filename.endswith('/'): # pragma: no cover
|
||||
self.external_attr = 0o40775 << 16 # drwxrwxr-x
|
||||
self.external_attr = (stat.S_IFDIR | 0o775) << 16 # drwxrwxr-x
|
||||
self.external_attr |= 0x10 # MS-DOS directory flag
|
||||
else:
|
||||
self.external_attr = 0o600 << 16 # ?rw-------
|
||||
self.external_attr = (stat.S_IFREG | 0o600) << 16 # -rw-------
|
||||
return self
|
||||
|
||||
def is_dir(self):
|
||||
|
@ -2012,7 +2012,7 @@ class ZipFile:
|
|||
zinfo = ZipInfo(directory_name)
|
||||
zinfo.compress_size = 0
|
||||
zinfo.CRC = 0
|
||||
zinfo.external_attr = ((0o40000 | mode) & 0xFFFF) << 16
|
||||
zinfo.external_attr = ((stat.S_IFDIR | mode) & 0xFFFF) << 16
|
||||
zinfo.file_size = 0
|
||||
zinfo.external_attr |= 0x10
|
||||
else:
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix :func:`zipfile.ZipFile.writestr` so it sets the "regular file" bit by
|
||||
default.
|
Loading…
Add table
Add a link
Reference in a new issue