Skip to content

[V0.8.2.5] WP-S1: Bestätigungs-Dialog für openfile:-Exec (#49) #54

Closed

Description

@Toqsick

Issue: #49 · Verdict: confirmed (Triage + Skeptiker) · Severity: Medium — top priority · Fix-Plan: security-fixplan-42-50.md → WP-S1, Release V0.8.2.5 (Security-Pass, TDD).

Befund: RecentManager (getRecentFiles, linux.dart:1045-1061) und xapp-Favorites (getFavoriteFiles, linux.dart:1705-1725) erzeugen openfile:-Entries (beide Module default-aktiv, Quelle = GTK recent-files/xbel, von jeder App schreibbar) → Substring-Match in der Suche → Klick → action_handler.dart:147-160: isFileExecutable prüft nur Mode-Bits → unawaited(Linux.runExecutableInTerminal(file)) → gnome-terminal -- <path> führt die Datei aus. Die TODO-Kommentare (:160-161 „Ask the user … possible security risk") räumen die Lücke selbst ein. (Issue-Abweichung: der Home-Scan erzeugt openfolder:-Einträge — kein Exec-Vektor.)

Fix (TDD):

  1. RED — Widget-Tests für den openfile-Zweig: bestätigt → runExecutableInTerminal gerufen; abgebrochen → nicht gerufen; kein Dialog bei Nicht-Executables (xdg-open-Pfad).
  2. GREEN — Bestätigungs-Dialog vor dem Exec-Aufruf nach existierendem Muster lib/tools/clean_timeshift.dart:69 _confirmDeletion (await vor dem unawaited, context.mounted-Check, l10n-Key für Dialogtext).
  3. Optional: Executable-Badge im Suchergebnis-Card (sichtbarer Hinweis vor dem Klick).

Gates: globales CI-Gate-Set; manuell: Suche trifft ein ausführbares Recent-File → Dialog erscheint, Abbrechen startet nichts.

Commit: „fix(search): confirm before executing files from recent/favorites".

Activity

  1. Toqsick commented on Sep 15, 2026

    @Toqsick
    OwnerAuthor

    Erledigt — Commit 0024fcd „fix(search): confirm before executing files from recent/favorites" auf hardening/0.8.x-browser-xdg (lokal, nicht gepusht; Push/Release braucht Bastis OK).

    Was drin ist (lib/services/action_handler.dart, openfile:-Zweig):

    • Bestätigungs-Dialog vor dem Exec; die Frage enthält den vollen Pfad (runFileQuestion(path)), dazu runFileWarning als Warntext. Der Terminal-Aufruf gnome-terminal -- <pfad> zeigt erst, was läuft, wenn es schon läuft — der Pfad muss vorher dastehen.
    • Abbrechen kehrt vor callback() zurück → Suchliste bleibt stehen, nichts wird gestartet.
    • Nicht-Executables laufen unverändert über xdg-open.
    • Beide TODO-Kommentare entfernt; context.mounted-Check über dem ersten await-Gap in dem Zweig.

    Gates (alle grün):

    • test/action_handler_test.dart neu, 3 Widget-Tests: bestätigt → Runner genau einmal mit dem Pfad + Callback; abgebrochen → weder Runner noch xdg-open, Liste bleibt; nicht-ausführbar → kein Dialog, xdg-open.
      • Damit die Tests nichts starten, sind die drei Prozessaufrufe injizierbar (ActionHandler.debugOverride) — bewusst mit unabhängiger Override-Semantik, damit ein Teil-Override nicht die übrigen Seams auf die echten Prozessstarts zurücksetzt und im flutter test ein gnome-terminal aufgeht.
    • l10n-Ratchet: runFileQuestion/runFileWarning in allen vier Sprachen (en/de/it/fi), Budgets unverändert. app_it.arb bekam zusätzlich das bisher fehlende executeInTerminal, sonst wäre der Bestätigen-Knopf auf Italienisch englisch geblieben.
    • check-versions ✓ · dart format ✓ · flutter analyze 0 Findings ✓ · flutter test +181 ✓ · python-unittest 42 ✓
    • Manuell (Pflicht-Gate) am Release-Bundle: Suche trifft openfile:/tmp/la-wps1-probe/la-wps1-probe.sh → Dialog mit vollem Pfad → Abbrechen startet nichts (Side-Effect-Datei unverändert, kein Terminalfenster, Liste bleibt) → Bestätigen führt die Datei aus. Zweimal reproduziert. Belege + Ablauf: Run-Dir final/wp-s1-2026-09-15/ (README + 4 Screenshots + executed.log).

    Nicht mit drin: das optionale Executable-Badge im Suchergebnis-Card (Punkt 3 der Empfehlung). Es braucht ein neues ActionEntry-Feld oder einen Async-Stat pro gerenderter Card plus State in der Liste — ein Feature, keine Fehlerbehebung; der Dialog schließt den Vektor bereits. Als Follow-up notiert.

    #49 bleibt offen (Release/Tag steht aus), #42/#56 unberührt.

  2. Toqsick commented on Oct 23, 2026

    @Toqsick
    OwnerAuthor

    Abnahme — erledigt (WP-S1)

    Work-Package S1 ist umgesetzt: Bestätigungs-Dialog vor dem Ausführen von Dateien aus dem
    Recent-/Favorites-Index.

    Der vollständige Nachweis steht in #49 (dieses Paket ist dessen Umsetzung) —
    Commit 0024fcd „fix(search): confirm before executing files from recent/favorites",
    Dialog in lib/services/action_handler.dart:70-90 und :214-228, Widget-Tests in
    test/action_handler_test.dart.

    Gates am 2026-10-23 (frisch, echte Exitcodes): flutter analyze → No issues found! ·
    flutter test → 223 Tests grün · dart format --set-exit-if-changed lib test → 123 Dateien, 0 geändert ·
    Python-Unittests 58 + 96 grün · packages/la_core 0 Findings / 25 Dateien / 68 Tests.

    Nachweis: docs/handoff/v0.8.2-xdg-browser-abschluss.md — folgt mit PR #154.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions