From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 22 Jun 2020 08:40:05 +0000 (-0700) Subject: bpo-41068: Fix read after write in zipfile for non-ASCII files names. (GH-21040) X-Git-Tag: v3.8.4rc1~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d7f37d1ed4fd38555e3e5aad32d515c96b528df5;p=thirdparty%2FPython%2Fcpython.git bpo-41068: Fix read after write in zipfile for non-ASCII files names. (GH-21040) (cherry picked from commit 36ff513f82e372ed3cea0bf7cbdf15a1ef6dab9e) Co-authored-by: Serhiy Storchaka --- diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 28e62dc5c61c..e2e37a177041 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -1589,6 +1589,11 @@ class OtherTests(unittest.TestCase): self.assertEqual(zf.filelist[0].filename, "foo.txt") self.assertEqual(zf.filelist[1].filename, "\xf6.txt") + def test_read_after_write_unicode_filenames(self): + with zipfile.ZipFile(TESTFN2, 'w') as zipfp: + zipfp.writestr('приклад', b'sample') + self.assertEqual(zipfp.read('приклад'), b'sample') + def test_exclusive_create_zip_file(self): """Test exclusive creating a new zipfile.""" unlink(TESTFN2) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index f7a2a2e8b8ab..73e89666309f 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -1546,7 +1546,7 @@ class ZipFile: # strong encryption raise NotImplementedError("strong encryption (flag bit 6)") - if zinfo.flag_bits & 0x800: + if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & 0x800: # UTF-8 filename fname_str = fname.decode("utf-8") else: diff --git a/Misc/NEWS.d/next/Library/2020-06-22-10-25-39.bpo-41068._bX2BW.rst b/Misc/NEWS.d/next/Library/2020-06-22-10-25-39.bpo-41068._bX2BW.rst new file mode 100644 index 000000000000..20580c7886fa --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-22-10-25-39.bpo-41068._bX2BW.rst @@ -0,0 +1,2 @@ +Fixed reading files with non-ASCII names from ZIP archive directly after +writing them.