Skip to content

Commit 42a18e1

Browse files
authored
gh-68164: Set the "regular file" bit in zipfile's writestr (GH-134232)
1 parent 4d30756 commit 42a18e1

3 files changed

Lines changed: 6 additions & 4 deletions

File tree

Lib/test/test_zipfile/test_core.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ def zip_test_writestr_permissions(self, f, compression):
500500
self.make_test_archive(f, compression)
501501
with zipfile.ZipFile(f, "r") as zipfp:
502502
zinfo = zipfp.getinfo('strfile')
503-
self.assertEqual(zinfo.external_attr, 0o600 << 16)
503+
self.assertEqual(zinfo.external_attr, 0o100600 << 16)
504504

505505
zinfo2 = zipfp.getinfo('written-open-w')
506506
self.assertEqual(zinfo2.external_attr, 0o600 << 16)
@@ -4513,8 +4513,8 @@ def test_for_archive(self):
45134513
zi = zipfile.ZipInfo(base_filename)._for_archive(zf)
45144514
self.assertEqual(zi.compress_level, 1)
45154515
self.assertEqual(zi.compress_type, zipfile.ZIP_STORED)
4516-
# ?rw- --- ---
4517-
filemode = stat.S_IRUSR | stat.S_IWUSR
4516+
# - rw- --- ---
4517+
filemode = stat.S_IFREG | stat.S_IRUSR | stat.S_IWUSR
45184518
# filemode is stored as the highest 16 bits of external_attr
45194519
self.assertEqual(zi.external_attr >> 16, filemode)
45204520
self.assertEqual(zi.external_attr & 0xFF, 0) # no MS-DOS flag

Lib/zipfile/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,7 @@ def _for_archive(self, archive):
689689
self.external_attr = 0o40775 << 16 # drwxrwxr-x
690690
self.external_attr |= 0x10 # MS-DOS directory flag
691691
else:
692-
self.external_attr = 0o600 << 16 # ?rw-------
692+
self.external_attr = 0o100600 << 16 # -rw-------
693693
return self
694694

695695
def is_dir(self):
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :func:`zipfile.ZipFile.writestr` so it sets the "regular file" bit by
2+
default.

0 commit comments

Comments
 (0)