mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
...
This commit is contained in:
parent
70e0cd6ba4
commit
4eb7ef507c
@ -148,6 +148,12 @@ def decode_arcname(name):
|
|||||||
name = name.decode('utf-8', 'replace')
|
name = name.decode('utf-8', 'replace')
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
# Added by Kovid to reset timestamp to default if it overflows the DOS
|
||||||
|
# limits
|
||||||
|
def fixtimevar(val):
|
||||||
|
if val < 0 or val > 0xffff:
|
||||||
|
val = 0
|
||||||
|
return val
|
||||||
|
|
||||||
def _check_zipfile(fp):
|
def _check_zipfile(fp):
|
||||||
try:
|
try:
|
||||||
@ -340,13 +346,7 @@ class ZipInfo (object):
|
|||||||
"""Return the per-file header as a string."""
|
"""Return the per-file header as a string."""
|
||||||
dt = self.date_time
|
dt = self.date_time
|
||||||
dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
|
dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
|
||||||
# Added by Kovid to reset timestamp to default if it overflows the DOS
|
|
||||||
# limits
|
|
||||||
if dosdate > 0xffff or dosdate < 0:
|
|
||||||
dosdate = 0
|
|
||||||
dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
|
dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
|
||||||
if dostime > 0xffff or dostime < 0:
|
|
||||||
dostime = 0
|
|
||||||
|
|
||||||
if self.flag_bits & 0x08:
|
if self.flag_bits & 0x08:
|
||||||
# Set these to zero because we write them after the file data
|
# Set these to zero because we write them after the file data
|
||||||
@ -372,7 +372,7 @@ class ZipInfo (object):
|
|||||||
filename, flag_bits = self._encodeFilenameFlags()
|
filename, flag_bits = self._encodeFilenameFlags()
|
||||||
header = struct.pack(structFileHeader, stringFileHeader,
|
header = struct.pack(structFileHeader, stringFileHeader,
|
||||||
self.extract_version, self.reserved, flag_bits,
|
self.extract_version, self.reserved, flag_bits,
|
||||||
self.compress_type, dostime, dosdate, CRC,
|
self.compress_type, fixtimevar(dostime), fixtimevar(dosdate), CRC,
|
||||||
compress_size, file_size,
|
compress_size, file_size,
|
||||||
len(filename), len(extra))
|
len(filename), len(extra))
|
||||||
return header + filename + extra
|
return header + filename + extra
|
||||||
@ -1328,8 +1328,8 @@ class ZipFile:
|
|||||||
for zinfo in self.filelist: # write central directory
|
for zinfo in self.filelist: # write central directory
|
||||||
count = count + 1
|
count = count + 1
|
||||||
dt = zinfo.date_time
|
dt = zinfo.date_time
|
||||||
dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
|
dosdate = fixtimevar((dt[0] - 1980) << 9 | dt[1] << 5 | dt[2])
|
||||||
dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
|
dostime = fixtimevar(dt[3] << 11 | dt[4] << 5 | (dt[5] // 2))
|
||||||
extra = []
|
extra = []
|
||||||
if zinfo.file_size > ZIP64_LIMIT \
|
if zinfo.file_size > ZIP64_LIMIT \
|
||||||
or zinfo.compress_size > ZIP64_LIMIT:
|
or zinfo.compress_size > ZIP64_LIMIT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user