From 566a994a7a5d61e02cbf8c28944b6a99ccc76439 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 6 Feb 2026 19:42:05 +0100 Subject: [PATCH 1/2] Add allowZip64 option to ZipFile initialization Enable support for larger ZIP files by allowing Zip64 in the openStream method. --- Charon/filetypes/OpenPackagingConvention.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Charon/filetypes/OpenPackagingConvention.py b/Charon/filetypes/OpenPackagingConvention.py index f5d8e6f..6e894be 100644 --- a/Charon/filetypes/OpenPackagingConvention.py +++ b/Charon/filetypes/OpenPackagingConvention.py @@ -47,7 +47,7 @@ def openStream(self, stream: IO[bytes], mime: str = "application/x-opc", mode: OpenMode = OpenMode.ReadOnly) -> None: self._mode = mode self._stream = stream # A copy in case we need to rewind for toByteArray. We should mostly be reading via self._zipfile. - self._zipfile = zipfile.ZipFile(self._stream, self._mode.value, compression=zipfile.ZIP_DEFLATED) + self._zipfile = zipfile.ZipFile(self._stream, self._mode.value, compression=zipfile.ZIP_DEFLATED, allowZip64=True) self._readContentTypes() # Load or create the content types element. self._readRels() # Load or create the relations. @@ -211,7 +211,7 @@ def toByteArray(self, offset: int = 0, count: int = -1) -> bytes: self._stream.seek(offset) result = self._stream.read(count) - self._zipfile = zipfile.ZipFile(self._stream, self._mode.value, compression=zipfile.ZIP_DEFLATED) + self._zipfile = zipfile.ZipFile(self._stream, self._mode.value, compression=zipfile.ZIP_DEFLATED, allowZip64=True) return result ## Adds a new content type to the archive. From c35beb9b8593472988353701e7f7b48b7da69123 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 6 Feb 2026 19:47:58 +0100 Subject: [PATCH 2/2] lint --- Charon/filetypes/OpenPackagingConvention.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Charon/filetypes/OpenPackagingConvention.py b/Charon/filetypes/OpenPackagingConvention.py index 6e894be..ab33d8b 100644 --- a/Charon/filetypes/OpenPackagingConvention.py +++ b/Charon/filetypes/OpenPackagingConvention.py @@ -350,8 +350,10 @@ def _resizeImage(self, virtual_path: str, width: int, height: int) -> IO[bytes]: def _readRels(self) -> None: assert self._zipfile is not None - self._relations[""] = ET.Element("Relationships", - xmlns="http://schemas.openxmlformats.org/package/2006/relationships") # There must always be a global relationships document. + self._relations[""] = ET.Element( + "Relationships", + xmlns="http://schemas.openxmlformats.org/package/2006/relationships" + ) # There must always be a global relationships document. # Below is some parsing of paths and extensions. # Normally you'd use os.path for this. But this is platform-dependent. @@ -412,8 +414,10 @@ def _readContentTypes(self) -> None: if content_types_element: self._content_types_element = content_types_element if not self._content_types_element: - self._content_types_element = ET.Element("Types", - xmlns="http://schemas.openxmlformats.org/package/2006/content-types") + self._content_types_element = ET.Element( + "Types", + xmlns="http://schemas.openxmlformats.org/package/2006/content-types" + ) # If there is no type for the .rels file, create it. if self._mode != OpenMode.ReadOnly: for type_element in self._content_types_element.iterfind(