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.
Reactions are currently unavailable
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
Acceptance
Suggested fix
Align with updater checksum streaming; decode/write on a background isolate; write entries incrementally.