[Security][P0] Maak het resourcebudget van presentatie-import volledig #874
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#874
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
De presentatie-import begrenst inmiddels de ruwe invoer, ZIP-grootte en Snappy-uitvoer, maar de huidige grenzen zijn nog geen samenhangend resourcebudget.
PresentationImportService.prepareaccepteert tot 2 GiB volledig in geheugen; validatie en importer decoderen hetzelfde archief opnieuw. ZIP kent geen limiet op aantal entries of compressieverhouding en de importers begrenzen aantallen dia's, XML-nodes, IWA-records en protobuf-objecten niet. De Snappy-stream wordt bovendien eerst in een groeiendeList<int>opgebouwd en daarna nogmaals naarUint8Listgekopieerd.Risico
Een groot of speciaal geconstrueerd
.pptx,.odpof.keykan buitensporig geheugen en CPU vragen, de app laten vastlopen of door het besturingssysteem laten beëindigen. De bestaande bytecaps beperken enkele gevallen, maar zijn hoog genoeg dat uitputting op gewone werkstations nog vóór de grens kan optreden.Voorgestelde aanpak
ImportFailureReasonmet een begrijpelijke melding.Acceptatiecriteria
Verificatie
Draai
make check, gerichte vijandige fixtures en een geheugen-/looptijdmeting op een representatief groot deck.Herkomst
Verplaatst en tegen de actuele OciDeck-port herijkt vanuit Keiko #1.
Opgepakt. Tak: fix/874-import-budget. Verwachte reikwijdte: nieuw lib/services/import/utils/import_budget.dart (één centraal budget), plus archive_utils.dart, xml_utils.dart, keynote/iwa/snappy.dart, presentation_import_service.dart en de drie importers voor de doorvoering; adversariële fixtures + een piekgeheugentest in test/import/.
Gebouwd en gemerged in main (merge
760c3c6d, commitef8be022, PR #884). Eén centraal ImportBudget, doorgevoerd op elk punt waar de bron de allocatie kon sturen; archief wordt nog maar één keer uitgepakt; Snappy zonder dubbele buffer; tel-caps op onderdelen/dia's/IWA-objecten; elke overschrijding eindigt als tooLarge met een leesbare limiet. make check groen (dekking 86,5%), secrets- en SAST-scan schoon, bewaker akkoord (afweging vastgelegd). Adversariële fixtures + decodeer-één-keer-test.NIET hierin, bewust: tijdbudget/annulering horen bij hetzelfde contract maar krijgen pas betekenis op een worker-isolate — die landen in #875, aan ditzelfde budget-object. En één niet-blokkerende gebruikstekst-nuance (de weigermelding kan erbij zeggen dat het origineel bruikbaar blijft in het bronprogramma) raakt de tooLarge-l10n-string; apart mee te nemen om de scope zuiver te houden.