[Bug] /download loescht Quelle auch bei fehlgeschlagenem ZIP-Schreiben #20

Closed
opened 2026-05-27 12:21:05 +02:00 by ferdi2go · 1 comment
Owner

Problem

server.py:177-198:

buf = io.BytesIO()
with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf:
    for fname in sorted(os.listdir(folder_abs)):
        ...
        if os.path.isfile(fpath):
            zf.write(fpath, fname)
buf.seek(0)
shutil.rmtree(folder_abs, ignore_errors=True)  # immer!

Wenn zf.write() fuer ein File fehlschlaegt oder ZIP korrupt ist, wird folder_abs trotzdem geloescht. ignore_errors=True schluckt alles.

Fix

ZIP-Inhalt verifizieren (Size > 0, alle Dateien drin), nur dann loeschen. Fehler loggen statt schlucken.

## Problem `server.py:177-198`: ```python buf = io.BytesIO() with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf: for fname in sorted(os.listdir(folder_abs)): ... if os.path.isfile(fpath): zf.write(fpath, fname) buf.seek(0) shutil.rmtree(folder_abs, ignore_errors=True) # immer! ``` Wenn `zf.write()` fuer ein File fehlschlaegt oder ZIP korrupt ist, wird `folder_abs` trotzdem geloescht. `ignore_errors=True` schluckt alles. ## Fix ZIP-Inhalt verifizieren (Size > 0, alle Dateien drin), nur dann loeschen. Fehler loggen statt schlucken.
ferdi2go added the priority: mediumbug labels 2026-05-27 12:21:05 +02:00
Author
Owner

Fix umgesetzt in server.py:download_kept:

  • Erwartete Dateiliste vor ZIP-Erstellung gesammelt
  • Pro Datei zf.write in try/except: Fehler werden gesammelt, nicht geschluckt
  • shutil.rmtree nur wenn alle erwarteten Dateien erfolgreich gepackt wurden
  • Bei Teilerfolg: HTTP 500 mit Klartext Nicht alle Dateien konnten gepackt werden (m/n). Quelle bleibt erhalten.

Manueller Test:

  • 2 lesbare Bilder -> 200 + 1124B, Ordner geloescht
  • 1 lesbare + 1 chmod 000 Datei -> 500, Ordner bleibt erhalten
Fix umgesetzt in `server.py:download_kept`: - Erwartete Dateiliste vor ZIP-Erstellung gesammelt - Pro Datei `zf.write` in try/except: Fehler werden gesammelt, nicht geschluckt - `shutil.rmtree` nur wenn alle erwarteten Dateien erfolgreich gepackt wurden - Bei Teilerfolg: HTTP 500 mit Klartext `Nicht alle Dateien konnten gepackt werden (m/n). Quelle bleibt erhalten.` Manueller Test: - 2 lesbare Bilder -> 200 + 1124B, Ordner geloescht - 1 lesbare + 1 chmod 000 Datei -> 500, Ordner bleibt erhalten
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ferdi2go/OnlyFrames#20