@@ -1769,13 +1769,9 @@ def test_write_unicode_filenames(self):
17691769 self .assertEqual (zf .filelist [0 ].filename , "foo.txt" )
17701770 self .assertEqual (zf .filelist [1 ].filename , "\xf6 .txt" )
17711771
1772- @requires_zlib ()
1773- def test_read_zipfile_containing_unicode_path_extra_field (self ):
1772+ def create_zipfile_with_extra_data (self , filename , extra_data_name ):
17741773 with zipfile .ZipFile (TESTFN , mode = 'w' ) as zf :
1775- # create a file with a non-ASCII name
1776- filename = '이름.txt'
1777- filename_encoded = filename .encode ('utf-8' )
1778-
1774+ filename_encoded = filename .encode ("utf-8" )
17791775 # create a ZipInfo object with Unicode path extra field
17801776 zip_info = zipfile .ZipInfo (filename )
17811777
@@ -1785,17 +1781,32 @@ def test_read_zipfile_containing_unicode_path_extra_field(self):
17851781 import zlib
17861782 filename_crc = struct .pack ('<L' , zlib .crc32 (filename_encoded ))
17871783
1788- extra_data = version_of_unicode_path + filename_crc + filename_encoded
1784+ extra_data = version_of_unicode_path + filename_crc + extra_data_name
17891785 tsize = len (extra_data ).to_bytes (2 , 'little' )
17901786
17911787 zip_info .extra = tag_for_unicode_path + tsize + extra_data
17921788
17931789 # add the file to the ZIP archive
17941790 zf .writestr (zip_info , b'Hello World!' )
17951791
1792+ @requires_zlib ()
1793+ def test_read_zipfile_containing_unicode_path_extra_field (self ):
1794+ self .create_zipfile_with_extra_data ("이름.txt" , "이름.txt" .encode ("utf-8" ))
17961795 with zipfile .ZipFile (TESTFN , "r" ) as zf :
17971796 self .assertEqual (zf .filelist [0 ].filename , "이름.txt" )
17981797
1798+ @requires_zlib ()
1799+ def test_read_zipfile_warning (self ):
1800+ self .create_zipfile_with_extra_data ("이름.txt" , b"" )
1801+ with self .assertWarns (UserWarning ):
1802+ zipfile .ZipFile (TESTFN , "r" ).close ()
1803+
1804+ @requires_zlib ()
1805+ def test_read_zipfile_error (self ):
1806+ self .create_zipfile_with_extra_data ("이름.txt" , b"\xff " )
1807+ with self .assertRaises (zipfile .BadZipfile ):
1808+ zipfile .ZipFile (TESTFN , "r" ).close ()
1809+
17991810 def test_read_after_write_unicode_filenames (self ):
18001811 with zipfile .ZipFile (TESTFN2 , 'w' ) as zipfp :
18011812 zipfp .writestr ('приклад' , b'sample' )
0 commit comments