Zwei Wege, auf denen ein hochgeladenes Dokument den Server umbringen
konnte. Beide haben gemeinsam, dass die Groesse aus der Datei kam.
1. Dekompressionsbombe. Die PDF-Stroeme wurden mit inflateSync ohne
maxOutputLength ausgepackt. Ein Flate-Strom sagt nicht, wie gross er
ausgepackt wird - ein paar Kilobyte Fuellung blaehen sich auf Gigabyte
auf. Jetzt ein Deckel je Strom (8 MB) und einer ueber die Summe
(64 MB); zlib bricht selbst ab, der Strom wird verworfen, der Text ist
eben unvollstaendig.
2. Riesenseiten. "pdftoppm -r 300" rendert mit fester Aufloesung, aber
die Seitengroesse steht im PDF. Bei 200 x 200 Zoll ergeben 300 dpi ein
Bild von 60000 x 60000 Pixeln, und zwar je Seite. Jetzt "-scale-to"
statt fester dpi: Die laengste Kante bekommt eine feste Pixelzahl,
unabhaengig davon, was im Dokument als Papierformat steht. Fuer A4
entspricht das etwa den bisherigen 300 dpi. Dazu ein Deckel auf die
Gesamtgroesse der gerenderten Dateien.
Der erste Bombentest war wertlos: Die Nutzlast enthielt keine
PDF-Textoperatoren, also war das Ergebnis mit und ohne Grenze leer. Mit
einer Marke in der Nutzlast und einer Gegenprobe knapp unter der Grenze
schlagen beide Mutationen an.
Refs #38