#10801: In zipfile, support different encodings for the header and the filenames. Patch by MvL, test by Eli Bendersky.

This commit is contained in:
Georg Brandl 2011-01-01 10:09:32 +00:00
parent d30a0dd681
commit 5ba11de845
4 changed files with 24 additions and 1 deletions

View file

@ -6,6 +6,7 @@ except ImportError:
import io import io
import os import os
import sys
import imp import imp
import time import time
import shutil import shutil
@ -23,6 +24,7 @@ from test.support import TESTFN, run_unittest, findfile, unlink
TESTFN2 = TESTFN + "2" TESTFN2 = TESTFN + "2"
TESTFNDIR = TESTFN + "d" TESTFNDIR = TESTFN + "d"
FIXEDTEST_SIZE = 1000 FIXEDTEST_SIZE = 1000
DATAFILES_DIR = 'zipfile_datafiles'
SMALL_TEST_DATA = [('_ziptest1', '1q2w3e4r5t'), SMALL_TEST_DATA = [('_ziptest1', '1q2w3e4r5t'),
('ziptest2dir/_ziptest2', 'qawsedrftg'), ('ziptest2dir/_ziptest2', 'qawsedrftg'),
@ -487,6 +489,18 @@ class TestsWithSourceFile(unittest.TestCase):
except zipfile.BadZipFile: except zipfile.BadZipFile:
self.assertTrue(zipfp2.fp is None, 'zipfp is not closed') 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): def tearDown(self):
unlink(TESTFN) unlink(TESTFN)
unlink(TESTFN2) unlink(TESTFN2)

Binary file not shown.

View file

@ -930,7 +930,13 @@ class ZipFile:
if fheader[_FH_EXTRA_FIELD_LENGTH]: if fheader[_FH_EXTRA_FIELD_LENGTH]:
zef_file.read(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: if not self._filePassed:
zef_file.close() zef_file.close()
raise BadZipFile( raise BadZipFile(

View file

@ -20,6 +20,9 @@ Core and Builtins
Library Library
------- -------
- Issue #10801: In zipfile, support different encodings for the header and
the filenames.
- Issue #6285: IDLE no longer crashes on missing help file; patch by Scott - Issue #6285: IDLE no longer crashes on missing help file; patch by Scott
David Daniels. David Daniels.