# 2026-08-20 — Устойчивость к битым файлам (v0.0.53) ## Root cause (найден по логу /tmp/drhider.log) SSE "connection failed" при обработке НЕ был обрывом шлюза. Воркер падал целиком: ``` worker: exception: PdfminerException(PDFSyntaxError('No /Root object! - Is this really a PDF?')) ``` на битом PDF (миниатюра 142 байта). Исключение в `extract_text` не было обёрнуто по-файлово → воркер ронялся → SSE слал `error` → фронт показывал "SSE connection failed". ## Фикс (drhider/obfuscator.py) Проход 1: `extract_text` обёрнут в try/except. При ошибке файл добавляется в `skipped`, логируется warning, файл пропускается, остальные обрабатываются. Проход 2: файлы из `skipped` пропускаются (не попадают в результат). Проверено на flat/ (10 файлов: 5 валидных + 5 битых миниатюр): - битые PDF/docx пропущены (PDFSyntaxError/BadZipFile), валидные 5 → в zip. - воркер не падает, complete доходит. ## Примечание Миниатюры 54-142 B в /mnt/y/T/flat — НЕ валидные PDF/docx (мусор из корзины). Их можно удалить из тестового набора (или оставить как кейс устойчивости).