mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix reading of names in custom zipfile module on py3
This commit is contained in:
parent
453d467caf
commit
e72e7e1773
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user