assertSafePdf: PDF-Streams vor Pattern-Scan ausblenden

Stage-Bug: User lädt zwei Handy-JPGs als PDF hoch → 415 mit
"PDF enthält JavaScript-Action". Die JPEG-Bytes im jsPDF-Output
enthielten zufällig die Byte-Folge "/JavaScript" → Pattern-Match
auf Binär-Daten statt PDF-Struktur.

Fix: stream..endstream-Blöcke vor dem Scan rauspatchen. Echte
PDF-Actions stehen IMMER außerhalb von Streams (Object-Dictionaries),
Binär-Streams (Bilder/Fonts/Komprimiertes) werden ignoriert.

Smoke-Test: jspdf-Style-PDF mit /JavaScript-Bytes im Stream
durchgewinkt, echte /OpenAction /S /JavaScript blockiert,
clean PDF OK.
This commit is contained in:
2026-06-03 17:54:38 +02:00
parent 7c18343a95
commit e792fe4185
2 changed files with 20 additions and 2 deletions
+13
View File
@@ -97,6 +97,19 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🐞 assertSafePdf: jspdf-PDFs mit JPEGs fälschlich als „JavaScript" blockiert**
- Stage-Bug: User lädt Ausweis als „JPGs → PDF" hoch → 415 mit
Meldung „PDF enthält JavaScript-Action". Backend hat den jspdf-
Output korrekt strukturell, aber die JPEG-Bytes im Image-Stream
enthielten zufällig die Byte-Folge „/JavaScript" → Pattern-Match.
- Fix: vor dem Pattern-Scan `stream..endstream`-Blöcke aus dem
PDF-Text rausnehmen. Echte aktive Inhalte stehen IMMER außerhalb
von Streams (in PDF-Object-Dictionaries) Binär-Streams enthalten
Bilder/Fonts/Komprimiertes und werden jetzt zu Recht ignoriert.
- Smoke-Test: jspdf-Style-PDF mit `/JavaScript`-Bytes im Stream
durchgewinkt, echte `/OpenAction /S /JavaScript` weiterhin
blockiert, clean PDF weiterhin OK.
- [x] **🐞 AddressModal: Straße-Feld ließ sich nicht editieren**
- `setFormData` wurde unbedingt im Render-Body aufgerufen, wenn
`formData.street !== address.street`. Jeder Tastendruck löste neu