fix(import): één centraal resourcebudget voor de presentatie-import (#874) #884
No reviewers
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!884
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/874-import-budget"
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?
De presentatie-import las een vreemd
.pptx/.odp/.keymet losse, hoge grenzen (2 GiB invoer, 4 GiB uitgepakt, 256/512 MiB Snappy, 50 MiB XML) over vijf bestanden verspreid, en zonder grens op het aantal onderdelen, dia's of IWA-objecten. Een geconstrueerd bestand kon zo een gewoon werkstation uitputten binnen die grenzen.Wat er verandert
ImportBudget(lib/services/import/utils/import_budget.dart) met realistische werkstation-grenzen, doorgevoerd op elk punt waar de bron de allocatie kon sturen: bronbytes, aantal onderdelen, per-entry en totaal uitgepakt, XML-partgrootte, Snappy blok en stream, dia's, IWA-objecten.standardin productie,forTestvoor de tests.Archivedoor aan zowel de validatie (validateFormatFromArchive) als de importer (preDecoded). Het bestand werd voorheen twee keer uitgepakt — een tweede volledige kopie is precies de piekgeheugen-regressie die dit sluit.BytesBuilderi.p.v. een groeiendeList<int>die daarna nóg eens naarUint8Listwerd gekopieerd.maxArchiveEntries32768 ligt ruim boven wat een deck vanmaxSlides2000 aan parts nodig heeft), zodat de dia-grens niet stil door de entry-grens wordt ingehaald.ImportFailureReason.tooLargemet een leesbare{limiet}— geen half deck, geen crash. Geen nieuwe l10n-string: de bestaandetooLarge-melding wordt hergebruikt. Een niet-zip of beschadigd archief blijft een aparte reden.Bewuste afweging (kernwaarde 2)
Door één grens te stellen weigert OciDeck voortaan een legitiem maar heel groot deck (bron >512 MiB of >2000 dia's) dat het vroeger — traag — misschien wél inlas. We kiezen robuustheid boven die randgevallen, omdat de weigering het bronbestand ongemoeid laat: de import leest alleen bytes en schrijft/verwijdert de bron nooit, dus de gebruiker raakt geen data kwijt en houdt zijn origineel bruikbaar in het oorspronkelijke programma — alleen deze specifieke, zeldzame conversie is geblokkeerd. Getoetst door de bewaker (akkoord-mits deze afweging vastligt; nu vastgelegd in
import_budget.darten de CHANGELOG).Bewust buiten deze PR
tooLarge-l10n-string (31 vertalingen); apart mee te nemen om de scope hier zuiver te houden.Geheugenbewijs
Deterministisch via een decodeer-één-keer-test (spy-importer die bevestigt dat de importer het al-uitgepakte archief krijgt), niet via een RSS-meting — die is onder de gedeelde testrunner te wisselvallig om een piek betrouwbaar te toetsen. De "meerdere volledige kopieën"-regressie ís het twee-keer-uitpakken, en dat is deterministisch afgedekt.
Tests
Adversariële fixtures: zip-bom (per-entry + totaal), zeer veel onderdelen, extreme Snappy-blok- en streamlengtes, te veel dia's (pptx + odp), te veel IWA-objecten (key), de XML-partgrens, plus de decodeer-één-keer-test en de service→tooLarge-keten. 234 import-tests groen (10 nieuw).
Poort
make checkgroen op de eindstaat (formatting, analyse, conventies, methodelengte, dode-code, hardgecodeerde tekst, commentaartaal, de volledige testsuite, dekkingsvloer 86,5% en per-bestand-vloer).make check-secretsenmake sastgedraaid. DAST (ZAP) niet — niet ingericht in deze omgeving; deze wijziging voegt geen netwerkoppervlak toe.Closes #874