From 60ac522435f7efc57cae2fa4d6d0acb871bbdffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20P=C3=B6ttker?= Date: Mon, 4 May 2026 16:35:20 +0200 Subject: [PATCH] fix: prevent processing of empty files in PDF service and scanner watcher --- paperless-backend/src/preprocessing/pdf.service.ts | 6 ++++++ .../src/scanner/scanner-watcher.service.ts | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/paperless-backend/src/preprocessing/pdf.service.ts b/paperless-backend/src/preprocessing/pdf.service.ts index 7fe63bd..11633d7 100644 --- a/paperless-backend/src/preprocessing/pdf.service.ts +++ b/paperless-backend/src/preprocessing/pdf.service.ts @@ -40,6 +40,12 @@ export class PdfService { * Verwendet einen einzigen Ghostscript-Aufruf mit %d-Platzhalter für alle Seiten. */ async pdfToImages(pdfPath: string, dpi = 200): Promise { + const stat = await fs.stat(pdfPath); + if (stat.size === 0) { + this.logger.warn(`PDF ist leer (0 Bytes), wird übersprungen: ${pdfPath}`); + return []; + } + const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'pdf-')); await execFileAsync('gs', [ diff --git a/paperless-backend/src/scanner/scanner-watcher.service.ts b/paperless-backend/src/scanner/scanner-watcher.service.ts index 2394114..4f4c7b7 100644 --- a/paperless-backend/src/scanner/scanner-watcher.service.ts +++ b/paperless-backend/src/scanner/scanner-watcher.service.ts @@ -143,7 +143,7 @@ export class ScannerWatcherService implements OnModuleInit, OnModuleDestroy { private async isStable(filePath: string): Promise { try { const stat = await fs.stat(filePath); - return Date.now() - stat.mtimeMs >= STABILITY_MS; + return stat.size > 0 && Date.now() - stat.mtimeMs >= STABILITY_MS; } catch { return false; } @@ -164,6 +164,17 @@ export class ScannerWatcherService implements OnModuleInit, OnModuleDestroy { const fileName = parts[1]; if (this.processing.has(filePath)) return; + + try { + const stat = await fs.stat(filePath); + if (stat.size === 0) { + this.logger.debug(`Überspringe leere Datei: ${filePath}`); + return; + } + } catch { + return; + } + this.processing.add(filePath); try {