mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
#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
4 changed files with 24 additions and 1 deletions
|
@ -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)
|
||||||
|
|
BIN
Lib/test/zip_cp437_header.zip
Normal file
BIN
Lib/test/zip_cp437_header.zip
Normal file
Binary file not shown.
|
@ -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(
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue