Geen disk-exhaustie-verdediging bij pakket-extractie (onduidelijke foutmelding bij volle schijf) #1360
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#1360
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
importPackageBytesDetailed(lib/services/file/file_service_import.dart:152)pakt elk lid uit naar schijf via
writeBytesAtomic. De totale bytes zijnbegrensd door
maxPackageBytes(512 MiB), maar er is geen check of dedoel-schijf voldoende ruimte heeft vóór de extractie begint.
Een schijf die bijna vol is, resulteert in een half uitgepakte map (die
abortAndCleanwel opruimt) maar met een onduidelijke foutmelding voor degebruiker — een generische "import mislukt" in plaats van "schijf bijna vol".
Ernst
Laag.
abortAndCleanvoorkomt de half-uitgepakte map, en 512 MiB is ruimbinnen elke moderne schijf. Maar voor "extreem robuust" hoort hier een gerichte
melding die de gebruiker vertelt wat er aan de hand is, in plaats van een
generische weigering die hem laat raden.
Oplossingsrichting
Twee opties:
Pre-check: voor de extractie begint, controleer beschikbare schijfruimte
op de doelmap (
statvfsop POSIX,GetDiskFreeSpaceExop Windows). Weigermet een gerichte
ImportFailure.diskFullals de beschikbare ruimte onderde verwachte extractiegrootte ligt.
Vangende try/catch: vang een
FileSystemExceptionmet "No space left"/ "disk full" tijdens
writeBytesAtomicen vertaal het naar dezelfdegerichte melding. Goedkoper, maar vangt pas na de eerste mislukte write.
Optie 2 is de lazy-senior-keuze: geen platform-specifieke API, en de
foutmelding is hetzelfde. Optie 1 is netter maar brengt platform-code met
zich mee.
Inschatting: ~10 regels voor optie 2, plus een
ImportFailure.diskFull-varianten de bijbehorende UI-tekst.
Herkomst
Gevonden tijdens security research naar defense-in-depth voor OciDeck. De
extractie is verder solide (zip-slip, bom, abort-and-clean), maar de
foutcommunicatie bij schijf-exhaustie is de enige plek waar de gebruiker een
onduidelijke melding krijgt in plaats van een gerichte.