summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Podoprigora <kirill.bast9@mail.ru>2023-10-14 07:17:47 (GMT)
committerGitHub <noreply@github.com>2023-10-14 07:17:47 (GMT)
commit4110cfec1233139b4e7c63459ba465ab80554e3e (patch)
treed14871ca9cbabe029736107b8005aaa3941273b3
parente2b3d831fd2824d8a5713e3ed2a64aad0fb6b62d (diff)
downloadcpython-4110cfec1233139b4e7c63459ba465ab80554e3e.zip
cpython-4110cfec1233139b4e7c63459ba465ab80554e3e.tar.gz
cpython-4110cfec1233139b4e7c63459ba465ab80554e3e.tar.bz2
gh-110715: Add missing import in zipfile (gh-110822)
-rw-r--r--Lib/test/test_zipfile/test_core.py25
-rw-r--r--Lib/zipfile/__init__.py1
2 files changed, 19 insertions, 7 deletions
diff --git a/Lib/test/test_zipfile/test_core.py b/Lib/test/test_zipfile/test_core.py
index 0f6c0f2..519d2ba 100644
--- a/Lib/test/test_zipfile/test_core.py
+++ b/Lib/test/test_zipfile/test_core.py
@@ -1769,13 +1769,9 @@ class OtherTests(unittest.TestCase):
self.assertEqual(zf.filelist[0].filename, "foo.txt")
self.assertEqual(zf.filelist[1].filename, "\xf6.txt")
- @requires_zlib()
- def test_read_zipfile_containing_unicode_path_extra_field(self):
+ def create_zipfile_with_extra_data(self, filename, extra_data_name):
with zipfile.ZipFile(TESTFN, mode='w') as zf:
- # create a file with a non-ASCII name
- filename = '이름.txt'
- filename_encoded = filename.encode('utf-8')
-
+ filename_encoded = filename.encode("utf-8")
# create a ZipInfo object with Unicode path extra field
zip_info = zipfile.ZipInfo(filename)
@@ -1785,7 +1781,7 @@ class OtherTests(unittest.TestCase):
import zlib
filename_crc = struct.pack('<L', zlib.crc32(filename_encoded))
- extra_data = version_of_unicode_path + filename_crc + filename_encoded
+ extra_data = version_of_unicode_path + filename_crc + extra_data_name
tsize = len(extra_data).to_bytes(2, 'little')
zip_info.extra = tag_for_unicode_path + tsize + extra_data
@@ -1793,9 +1789,24 @@ class OtherTests(unittest.TestCase):
# add the file to the ZIP archive
zf.writestr(zip_info, b'Hello World!')
+ @requires_zlib()
+ def test_read_zipfile_containing_unicode_path_extra_field(self):
+ self.create_zipfile_with_extra_data("이름.txt", "이름.txt".encode("utf-8"))
with zipfile.ZipFile(TESTFN, "r") as zf:
self.assertEqual(zf.filelist[0].filename, "이름.txt")
+ @requires_zlib()
+ def test_read_zipfile_warning(self):
+ self.create_zipfile_with_extra_data("이름.txt", b"")
+ with self.assertWarns(UserWarning):
+ zipfile.ZipFile(TESTFN, "r").close()
+
+ @requires_zlib()
+ def test_read_zipfile_error(self):
+ self.create_zipfile_with_extra_data("이름.txt", b"\xff")
+ with self.assertRaises(zipfile.BadZipfile):
+ zipfile.ZipFile(TESTFN, "r").close()
+
def test_read_after_write_unicode_filenames(self):
with zipfile.ZipFile(TESTFN2, 'w') as zipfp:
zipfp.writestr('приклад', b'sample')
diff --git a/Lib/zipfile/__init__.py b/Lib/zipfile/__init__.py
index 2c963de..995d267 100644
--- a/Lib/zipfile/__init__.py
+++ b/Lib/zipfile/__init__.py
@@ -545,6 +545,7 @@ class ZipInfo (object):
if up_unicode_name:
self.filename = _sanitize_filename(up_unicode_name)
else:
+ import warnings
warnings.warn("Empty unicode path extra field (0x7075)", stacklevel=2)
except struct.error as e:
raise BadZipFile("Corrupt unicode path extra field (0x7075)") from e