Corrupt-file-corpus in test-suite (vaste set pathologische bestanden bij elke CI-run) #1357

Closed
opened 2026-08-07 22:18:34 +00:00 by brenno · 0 comments
Owner

Wat

Een vaste, geversioneerde set met opzettelijk kapotte en pathologische
bestanden in de test-suite, die bij elke CI-run wordt geopend om te
verifiëren dat elk invoerpad graceful faalt — geen crash, geen hang, geen
stil-wegschrijven van data.

Waarom

Dit is de "runnable check" die de eigen repo-regels eisen voor niet-triviale
logica: de kleinste test die faalt als de logica breekt. Voor de
robustness-eis ("corrupte bestanden mogen de app niet laten crashen") is die
check een corpus, niet één assertion.

Het voorkomt regressie van de fixes die uit #1350–#1355 voortkomen. Zonder een
vaste corpus betekent elke nieuwe parser of elk refactor dat je de
robustness-garantie opnieuw handmatig moet nagaan — en dat is precies het
soort werk dat stilletjes niet gebeurt.

Voorgestelde corpus

Een map test/corpus/ met minimaal:

  • Afgebroken deck: frontmatter compleet, body leeg (de #1350-case).
  • Niet-UTF8 deck: binaire bytes hernoemd naar .md.
  • Willekeurige bytes als .md: geen frontmatter, geen marp.
  • Zip-bom: hoge compressie-ratio, understated uncompressed size.
  • Zip-slip-pakket: entries met ../ en absolute paden.
  • Diep-geneste JSON-sidecar: [[[[[[...]]]]]] tot de stack-overflow
    (de #1353-case).
  • Oversized sidecar: boven de 16 MiB-cap.
  • 30000×30000 PNG: een paar KB op schijf (de decode-bom-case).
  • GIF met 10.000 frames: de #1354-case.
  • Versleuteld pakket met verkeerde MAC: de #1351-case.
  • Versleeld deck, bewerkt na verzegeling: de #1355-case.

Elk bestand wordt in een test aangeboden aan het juiste invoerpad, en de test
beweert: geen exception, geen crash, een geldige weigering of een geldig
resultaat met waarschuwing.

Organisatie

Dit is een taak die georganiseerd moet worden: de corpus-bestanden maken (sommige
zijn synthetic, sommige zijn gemuteerde echte bestanden), de test-harness die ze
elk door het juiste pad haalt, en een plek in CI. Het is de structurele tegenhanger
van #1356 (fuzz-infrastructuur): waar fuzzing random inputs genereert, is dit een
vaste, gecurateerde set die de bekende faalmoden dekt.

Beide samen — een vaste corpus voor regressie en fuzz-infrastructuur voor
ontdekking — zijn de twee lagen die de handmatige security-research-rondes
structuur geven.

Herkomst

Geïdentificeerd tijdens security research naar defense-in-depth voor OciDeck.
De bevindingen uit deze ronde zijn elk een faalmodus die in zo'n corpus
thuishoort.

## Wat Een vaste, geversioneerde set met opzettelijk kapotte en pathologische bestanden in de test-suite, die bij elke CI-run wordt geopend om te verifiëren dat elk invoerpad graceful faalt — geen crash, geen hang, geen stil-wegschrijven van data. ## Waarom Dit is de "runnable check" die de eigen repo-regels eisen voor niet-triviale logica: de kleinste test die faalt als de logica breekt. Voor de robustness-eis ("corrupte bestanden mogen de app niet laten crashen") is die check een corpus, niet één assertion. Het voorkomt regressie van de fixes die uit #1350–#1355 voortkomen. Zonder een vaste corpus betekent elke nieuwe parser of elk refactor dat je de robustness-garantie opnieuw handmatig moet nagaan — en dat is precies het soort werk dat stilletjes niet gebeurt. ## Voorgestelde corpus Een map `test/corpus/` met minimaal: - **Afgebroken deck**: frontmatter compleet, body leeg (de #1350-case). - **Niet-UTF8 deck**: binaire bytes hernoemd naar `.md`. - **Willekeurige bytes als `.md`**: geen frontmatter, geen marp. - **Zip-bom**: hoge compressie-ratio, understated uncompressed size. - **Zip-slip-pakket**: entries met `../` en absolute paden. - **Diep-geneste JSON-sidecar**: `[[[[[[...]]]]]]` tot de stack-overflow (de #1353-case). - **Oversized sidecar**: boven de 16 MiB-cap. - **30000×30000 PNG**: een paar KB op schijf (de decode-bom-case). - **GIF met 10.000 frames**: de #1354-case. - **Versleuteld pakket met verkeerde MAC**: de #1351-case. - **Versleeld deck, bewerkt na verzegeling**: de #1355-case. Elk bestand wordt in een test aangeboden aan het juiste invoerpad, en de test beweert: geen exception, geen crash, een geldige weigering of een geldig resultaat met waarschuwing. ## Organisatie Dit is een taak die georganiseerd moet worden: de corpus-bestanden maken (sommige zijn synthetic, sommige zijn gemuteerde echte bestanden), de test-harness die ze elk door het juiste pad haalt, en een plek in CI. Het is de structurele tegenhanger van #1356 (fuzz-infrastructuur): waar fuzzing random inputs genereert, is dit een vaste, gecurateerde set die de bekende faalmoden dekt. Beide samen — een vaste corpus voor regressie en fuzz-infrastructuur voor ontdekking — zijn de twee lagen die de handmatige security-research-rondes structuur geven. ## Herkomst Geïdentificeerd tijdens security research naar defense-in-depth voor OciDeck. De bevindingen uit deze ronde zijn elk een faalmodus die in zo'n corpus thuishoort.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1357
No description provided.