#10801: In zipfile, support different encodings for the header and the filenames. Patch by MvL, test by Eli Bendersky.
This commit is contained in:
parent
d30a0dd681
commit
5ba11de845
|
@ -6,6 +6,7 @@ except ImportError:
|
|||
|
||||
import io
|
||||
import os
|
||||
import sys
|
||||
import imp
|
||||
import time
|
||||
import shutil
|
||||
|
@ -23,6 +24,7 @@ from test.support import TESTFN, run_unittest, findfile, unlink
|
|||
TESTFN2 = TESTFN + "2"
|
||||
TESTFNDIR = TESTFN + "d"
|
||||
FIXEDTEST_SIZE = 1000
|
||||
DATAFILES_DIR = 'zipfile_datafiles'
|
||||
|
||||
SMALL_TEST_DATA = [('_ziptest1', '1q2w3e4r5t'),
|
||||
('ziptest2dir/_ziptest2', 'qawsedrftg'),
|
||||
|
@ -487,6 +489,18 @@ class TestsWithSourceFile(unittest.TestCase):
|
|||
except zipfile.BadZipFile:
|
||||
self.assertTrue(zipfp2.fp is None, 'zipfp is not closed')
|
||||
|
||||
def test_unicode_filenames(self):
|
||||
if __name__ == '__main__':
|
||||
myfile = sys.argv[0]
|
||||
else:
|
||||
myfile = __file__
|
||||
|
||||
mydir = os.path.dirname(myfile) or os.curdir
|
||||
fname = os.path.join(mydir, 'zip_cp437_header.zip')
|
||||
|
||||
with zipfile.ZipFile(fname) as zipfp:
|
||||
zipfp.extractall()
|
||||
|
||||
def tearDown(self):
|
||||
unlink(TESTFN)
|
||||
unlink(TESTFN2)
|
||||
|
|
Binary file not shown.
|
@ -930,7 +930,13 @@ class ZipFile:
|
|||
if fheader[_FH_EXTRA_FIELD_LENGTH]:
|
||||
zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
|
||||
|
||||
if fname != zinfo.orig_filename.encode("utf-8"):
|
||||
if zinfo.flag_bits & 0x800:
|
||||
# UTF-8 filename
|
||||
fname_str = fname.decode("utf-8")
|
||||
else:
|
||||
fname_str = fname.decode("cp437")
|
||||
|
||||
if fname_str != zinfo.orig_filename:
|
||||
if not self._filePassed:
|
||||
zef_file.close()
|
||||
raise BadZipFile(
|
||||
|
|
Loading…
Reference in New Issue