Fix reading of names in custom zipfile module on py3

This commit is contained in:
Kovid Goyal 2019-12-12 23:14:58 +05:30
parent 453d467caf
commit e72e7e1773
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -400,12 +400,6 @@ class ZipInfo (object):
else: else:
return self.filename, self.flag_bits return self.filename, self.flag_bits
def _decodeFilename(self):
if self.flag_bits & 0x800:
return self.filename.decode('utf-8')
else:
return decode_arcname(self.filename)
def _decodeExtra(self): def _decodeExtra(self):
# Try to decode the extra field. # Try to decode the extra field.
extra = self.extra extra = self.extra
@ -847,6 +841,13 @@ class ZipFile:
if self.debug > 2: if self.debug > 2:
print(centdir) print(centdir)
filename = fp.read(centdir[_CD_FILENAME_LENGTH]) filename = fp.read(centdir[_CD_FILENAME_LENGTH])
flags = centdir[5]
if flags & 0x800:
# UTF-8 file names extension
filename = filename.decode('utf-8')
else:
# Historical ZIP filename encoding
filename = filename.decode('cp437')
# Create ZipInfo instance to store file information # Create ZipInfo instance to store file information
x = ZipInfo(filename) x = ZipInfo(filename)
x.extra = fp.read(centdir[_CD_EXTRA_FIELD_LENGTH]) x.extra = fp.read(centdir[_CD_EXTRA_FIELD_LENGTH])
@ -863,7 +864,6 @@ class ZipFile:
x._decodeExtra() x._decodeExtra()
x.header_offset = x.header_offset + concat x.header_offset = x.header_offset + concat
x.filename = x._decodeFilename()
self.filelist.append(x) self.filelist.append(x)
self.NameToInfo[x.filename] = x self.NameToInfo[x.filename] = x