Truncatie-check ontbreekt op content/URL-import-pad (openDeckFromContent) #1350
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#1350
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?
Bevinding
FileService.openDeckDetailed(het schijf-pad) weigert een bestand metcomplete frontmatter maar lege slide-body als
OpenFailure.corruptvia_looksTruncated— een afgebroken bestand opent dus niet stil als eenbijna-leeg deck.
FileService.openDeckFromContent(gebruikt voor web-URL-import en in-memoryopen) loopt door dezelfde fail-closed poort (safety scan → marp-sniff → parse),
maar niet door de truncatie-check. Een afgebroken download — frontmatter
wel, body niet — opent hier stil als een deck met één placeholder-slide in
plaats van
corruptte signaleren.De gebruiker ziet een bijna-leeg deck en denkt dat de bron leeg was, in plaats
van dat de transfer stuk liep. Dat is een stille data-verlies-ervaring op een
pad dat verder bewust fail-closed is.
Locatie
lib/services/file_service.dart:openDeckDetailedmet_looksTruncated(regels ~639-645),
openDeckFromContent(regels ~903-931).content == null-guard in_looksTruncated: de checkdraait nu alleen voor het schijf-pad.
Oplossingsrichting
De truncatie-check heffen naar een gedeelde helper of dupliceren in
openDeckFromContent, zodat beide open-paden dezelfde weigering geven. Deconditie
content == nullin de huidige check is precies wat dit gat maakt —die guard is er nu alleen voor het schijf-pad, terwijl de semantiek
("complete header, geen body = afgeknapt") ook geldt voor content die uit een
netwerkdownload kwam.
Klein diff: de check factoren of dupliceren in
openDeckFromContent, met eenfalende test die een truncated deck via
openDeckFromContentaanbiedt enOpenFailure.corruptverwacht.Herkomst
Gevonden tijdens security research naar de robustness van OciDeck bij het
openen van corrupte bestanden en resource-uitputting (decompressie-bommen,
decode-bommen, zip-slip, truncatie). De overige paden — zip-slip
(
safeOutPath), decompressie-bommen (_CappedOutputStream), decode-bommen(
kMaxImageDecodeDimension), sidecar-isolatie, UTF-8/parse-fail-closed —bleken volwassen. Dit was de enige echte asymmetrie tussen twee open-paden
die dezelfde poort zouden moeten delen.