Skip to content

Instantly share code, notes, and snippets.

@obfusk
Last active March 29, 2024 16:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save obfusk/4c141994c827dcac13506c7132cc103e to your computer and use it in GitHub Desktop.
Save obfusk/4c141994c827dcac13506c7132cc103e to your computer and use it in GitHub Desktop.
import zipfile
def test(filename):
_orig_EndRecData = zipfile._EndRecData
eocd_offset = None
def _EndRecData(fh):
endrec = _orig_EndRecData(fh)
if endrec:
nonlocal eocd_offset
eocd_offset = endrec[zipfile._ECD_LOCATION]
endrec[zipfile._ECD_LOCATION] = (
endrec[zipfile._ECD_OFFSET] + endrec[zipfile._ECD_SIZE]
)
return endrec
zipfile._EndRecData = _EndRecData
zf = zipfile.ZipFile(filename)
zipfile._EndRecData = _orig_EndRecData
zinfos = sorted(zf.filelist, key=lambda zinfo: zinfo.header_offset, reverse=True)
if zinfos:
if hasattr(zinfos[0], "_end_offset"):
zinfos[0]._end_offset = eocd_offset
return zf
zf1 = test("test1.mozzip")
zf2 = test("test2.mozzip")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment