Commit 03a3bb81 authored by Finn Bock's avatar Finn Bock

[ #458701 ] Patch to zipfile.py for Java

Patch by Jim Ahlstrom which lets java's zipfile classes read zipfiles
create by zipfile.py.
parent 198c1d8b
...@@ -383,13 +383,14 @@ class ZipFile: ...@@ -383,13 +383,14 @@ class ZipFile:
zinfo.compress_type = compress_type zinfo.compress_type = compress_type
self._writecheck(zinfo) self._writecheck(zinfo)
fp = open(filename, "rb") fp = open(filename, "rb")
zinfo.flag_bits = 0x08 zinfo.flag_bits = 0x00
zinfo.header_offset = self.fp.tell() # Start of header bytes zinfo.header_offset = self.fp.tell() # Start of header bytes
# Must overwrite CRC and sizes with correct data later
zinfo.CRC = CRC = 0
zinfo.compress_size = compress_size = 0
zinfo.file_size = file_size = 0
self.fp.write(zinfo.FileHeader()) self.fp.write(zinfo.FileHeader())
zinfo.file_offset = self.fp.tell() # Start of file bytes zinfo.file_offset = self.fp.tell() # Start of file bytes
CRC = 0
compress_size = 0
file_size = 0
if zinfo.compress_type == ZIP_DEFLATED: if zinfo.compress_type == ZIP_DEFLATED:
cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
zlib.DEFLATED, -15) zlib.DEFLATED, -15)
...@@ -415,9 +416,12 @@ class ZipFile: ...@@ -415,9 +416,12 @@ class ZipFile:
zinfo.compress_size = file_size zinfo.compress_size = file_size
zinfo.CRC = CRC zinfo.CRC = CRC
zinfo.file_size = file_size zinfo.file_size = file_size
# Write CRC and file sizes after the file data # Seek backwards and write CRC and file sizes
position = self.fp.tell() # Preserve current position in file
self.fp.seek(zinfo.header_offset + 14, 0)
self.fp.write(struct.pack("<lll", zinfo.CRC, zinfo.compress_size, self.fp.write(struct.pack("<lll", zinfo.CRC, zinfo.compress_size,
zinfo.file_size)) zinfo.file_size))
self.fp.seek(position, 0)
self.filelist.append(zinfo) self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo self.NameToInfo[zinfo.filename] = zinfo
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment