Skip to content

Commit d7f37d1

Browse files
bpo-41068: Fix read after write in zipfile for non-ASCII files names. (GH-21040)
(cherry picked from commit 36ff513) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
1 parent b99824a commit d7f37d1

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

Lib/test/test_zipfile.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,11 @@ def test_write_unicode_filenames(self):
15891589
self.assertEqual(zf.filelist[0].filename, "foo.txt")
15901590
self.assertEqual(zf.filelist[1].filename, "\xf6.txt")
15911591

1592+
def test_read_after_write_unicode_filenames(self):
1593+
with zipfile.ZipFile(TESTFN2, 'w') as zipfp:
1594+
zipfp.writestr('приклад', b'sample')
1595+
self.assertEqual(zipfp.read('приклад'), b'sample')
1596+
15921597
def test_exclusive_create_zip_file(self):
15931598
"""Test exclusive creating a new zipfile."""
15941599
unlink(TESTFN2)

Lib/zipfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1546,7 +1546,7 @@ def open(self, name, mode="r", pwd=None, *, force_zip64=False):
15461546
# strong encryption
15471547
raise NotImplementedError("strong encryption (flag bit 6)")
15481548

1549-
if zinfo.flag_bits & 0x800:
1549+
if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & 0x800:
15501550
# UTF-8 filename
15511551
fname_str = fname.decode("utf-8")
15521552
else:
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed reading files with non-ASCII names from ZIP archive directly after
2+
writing them.

0 commit comments

Comments
 (0)