fix: Dateinamen mit Pfadtrennzeichen beim Mail-Import absichern
Build and Push Multi-Platform Images / build-and-push (push) Successful in 31s

Anhänge mit '/' im Dateinamen (z.B. "Rechnung - 2026/002650322.PDF")
führten zu einem Fehler, weil '/' als Verzeichnistrenner interpretiert
wurde und der temp. Pfad nicht existierte.

- sanitizeFilename() ersetzt '/' und '\' durch '-', entfernt '..' und Null-Bytes
- Wird beim Speichern in die DB (email-download) und beim Aufbau des
  temp. Pfads (email-import) angewendet (defense-in-depth)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 11:10:36 +02:00
parent 1c70473cef
commit 7b2a79be2a
2 changed files with 18 additions and 2 deletions
@@ -20,6 +20,14 @@ import { Attachment } from '../database/entities/attachment.entity';
import { Content } from '../database/entities/content.entity';
import { isERechnung } from './zugferd.util';
function sanitizeFilename(name: string): string {
return name
.replace(/[/\\]/g, '-')
.replace(/\.\./g, '.')
.replace(/\x00/g, '')
.trim();
}
@Injectable()
export class EmailDownloadService {
private readonly logger = new Logger(EmailDownloadService.name);
@@ -291,7 +299,7 @@ export class EmailDownloadService {
}
const attachment = new Attachment();
attachment.FileName = filename.slice(0, 255);
attachment.FileName = sanitizeFilename(filename).slice(0, 255);
attachment.ContentType = contentType.slice(0, 100);
attachment.IsEmbedded = isEmbedded;
attachment.ContentId = att.cid ? att.cid.slice(0, 255) : null;