818f801939
R101.1 INFO/funktional: Pentester sieht Content-Disposition: attachment auch bei ?disposition=inline. Die Logik im Controller ist korrekt und liefert beim Direkttest gegen echte PDFs application/pdf, der Pfad lässt sich aber in Prod nicht reproduzieren. Refaktoriert: - Magic-Byte-Check in detectSafeContentType() extrahiert - File-Descriptor wird in finally garantiert geschlossen - Short-Read-Fälle (bytesRead < n) explizit geguardet - console.warn wenn inline angefragt aber Magic-Byte-Mismatch oder Read-Crash – damit der Fall in Prod-Logs sichtbar wird falls er wieder auftritt Sicherheits-Verhalten unverändert: Mismatch → attachment (Stored-XSS-Schutz aus R30.13). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>