From 4803a22b33f4fd6adef5b55e08e35094cccd16e0 Mon Sep 17 00:00:00 2001 From: Quratulain-bilal Date: Thu, 30 Jul 2026 19:22:35 +0500 Subject: [PATCH] fix: use chunked read for extension manifest hash (#3841) Replace unbounded f.read() with chunked iteration to prevent excessive memory allocation on large or corrupted manifest files. Matches the pattern used in integrations/manifest.py _sha256(). --- src/specify_cli/extensions/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/specify_cli/extensions/__init__.py b/src/specify_cli/extensions/__init__.py index 354393b0d..1038699be 100644 --- a/src/specify_cli/extensions/__init__.py +++ b/src/specify_cli/extensions/__init__.py @@ -566,8 +566,11 @@ class ExtensionManifest: def get_hash(self) -> str: """Calculate SHA256 hash of manifest file.""" + h = hashlib.sha256() with open(self.path, "rb") as f: - return f"sha256:{hashlib.sha256(f.read()).hexdigest()}" + for chunk in iter(lambda: f.read(8192), b""): + h.update(chunk) + return f"sha256:{h.hexdigest()}" class ExtensionRegistry: