Parent
Part of #414
Problem
SafeZipExtractor.readBoundedBytes uses file.readAsBytes() (up to 100 MiB compressed). Marketplace/sideload then SHA256 the whole buffer and ZipDecoder().decodeBytes, keeping entry contents (uncompressed limit up to 500 MiB). Peak ≈ compressed + decoded + per-file copies.
Updater already streams SHA256 — marketplace should match.
Evidence
lib/core/security/safe_zip_extractor.dart (~43–88)
lib/core/market/http_marketplace_repository.dart (~174–221)
lib/core/extensions/local_extension_installer.dart
Acceptance
Suggested fix
Align with updater checksum streaming; decode/write on a background isolate; write entries incrementally.
Parent
Part of #414
Problem
SafeZipExtractor.readBoundedBytesusesfile.readAsBytes()(up to 100 MiB compressed). Marketplace/sideload then SHA256 the whole buffer andZipDecoder().decodeBytes, keeping entry contents (uncompressed limit up to 500 MiB). Peak ≈ compressed + decoded + per-file copies.Updater already streams SHA256 — marketplace should match.
Evidence
lib/core/security/safe_zip_extractor.dart(~43–88)lib/core/market/http_marketplace_repository.dart(~174–221)lib/core/extensions/local_extension_installer.dartAcceptance
sha256.bind(file.openRead())) like updaterSuggested fix
Align with updater checksum streaming; decode/write on a background isolate; write entries incrementally.