Skip to content

[V0.8.2] WP-B2: Icon-Loader auf argv umstellen + Quote-Shim entfernen (#45) #53

Closed

Description

@Toqsick

Issue: #45 · Verdict: contested — Mechanik-Prämisse entkräftet (Dart escapet argv per Single-Quote-Wrapping, POSIX) · Severity: Low pending RV-1 · Fix-Plan: security-fixplan-42-50.md → WP-B2, eingewebt in Release V0.8.2. Gate: RV-1 zuerst — RV-1 entscheidet final, ob Härtung oder Pflicht.

Befund: Sink icon_loader.dart:64-68 (--file='$filePath', drei Aufrufe :52/:59/:64) über runInShell:true-Default; Quote-Strip-Shim in additional/python/get_icon_path_for_file.py arbeitet unter Dart-Escaping korrekt. Entkräftet als Injection — bleibende Härtung: handgeschriebene Quotes sind fehleranfällig (dasselbe Muster, das runPythonScript :1478 schon einmal abbekommen hat).

Fix (Paar!): runInShell: false an allen drei icon_loader-Aufrufen und gleichzeitig den Quote-Strip-Shim im Python-Skript entfernen (sonst bricht der Icon-Lookup: --file='…' bleibt mit Quotes im argv und der Pfad matcht nicht). RV-1-Vorlauf (Probe 1).

Commit: „fix(icon): pass file paths as plain argv to the icon helper".

Gates: globales CI-Gate-Set; RV-1-Beleg im Run-Dir.

Activity

  1. Toqsick commented on Oct 23, 2026

    @Toqsick
    OwnerAuthor

    Work-Package umgesetzt — Merge von PR #155 steht noch aus

    WP-B2 ist implementiert, getestet und als PR eingereicht. Das Issue bleibt offen, bis PR #155
    in main gemerged ist
    — geschlossen wird nur, was nachweislich in main ist.

    Commit: 4049874 „fix(icon): pass file paths as plain argv to the icon helper" (PR #155,
    Branch fix/45-icon-loader-argv). Follow-up: fc6a200 (Status im Fixplan).

    Scope laut Fixplan eingehalten:

    • runInShell: false an allen drei icon_loader-Aufrufstellen (:50 Ordner, :57 App,
      :65 Datei) — nicht nur am Datei-Zweig.
    • Der Quote-Strip-Shim in additional/python/get_icon_path_for_file.py ist gleichzeitig
      entfernt. Genau das ist der Punkt „nur als gekoppeltes Paar": der Helfer hat den Wert bisher
      umgeschrieben, und ein Aufrufer mit nacktem Pfad hätte bei einem Pfad mit abschließendem
      Quote-Zeichen ein abgeschnittenes Fragment bekommen.

    TDD:

    • test/icon_loader_test.dart (neu, 7 Tests) — argv ohne Quotes, Pfad mit Leerzeichen als ein
      Argument, runInShell false an allen drei Stellen. RED: 6 Failures.
    • additional/python/tests/test_icon_path_helper.py (neu, 4 Tests) — der Helfer reicht den Wert
      unverändert an Gio.File.new_for_path durch (GTK-Stack gemockt). RED: 2 Failures.

    Gates am 2026-10-23 (echte Exitcodes): check-versions.sh OK · Format-Gate 124 Dateien
    0 geändert · flutter analyze No issues found! · flutter test 230 Tests ·
    Python-Unit-Tests 62 Tests · la_core 0 Findings / 25 Dateien / 68 Tests.

    E2E mit echtem GI-Stack: Pfad mit Leerzeichen und Pfad mit abschließendem Quote → beide
    scheitern erst im Gtk-Teil, der Gio-Teil lief mit dem richtigen Pfad durch.

    Nicht in diesem Paket: der Kommentar lib/services/linux.dart:1496-1501 („argv is
    space-joined unquoted") ist sachlich falsch — die Sonde zeigt, dass jedes argv-Element einzeln
    quotet wird. Die Korrektur gehört zu WP-S3 / #56 (Default-Flip), nicht hier.

  2. Toqsick commented on Oct 23, 2026

    @Toqsick
    OwnerAuthor

    Abnahme — erledigt (WP-B2)

    PR #155 ist gemerged (abf3465, 2026-10-23 21:04 UTC), Commit 4049874 („fix(icon): pass file
    paths as plain argv to the icon helper"). Das Work-Package ist damit abgeschlossen.

    Scope laut Fixplan eingehalten:

    • runInShell: false an allen drei icon_loader-Aufrufstellen — nicht nur am Datei-Zweig
    • der Quote-Strip-Shim im Python-Helfer gleichzeitig entfernt (das gekoppelte Paar)

    TDD: RED 6 Failures (Dart) + 2 Failures (Python) → GREEN 7/7 + 4/4.

    Gates am 2026-10-23 (echte Exitcodes): check-versions.sh OK · Format-Gate 124 Dateien
    0 geändert · flutter analyze No issues found! · flutter test 230 Tests · Python 62 Tests ·
    la_core 0 Findings / 25 Dateien / 68 Tests.

    E2E mit echtem GI-Stack: Pfad mit Leerzeichen und Pfad mit abschließendem Quote → beide
    scheitern erst im Gtk-Teil, der Gio-Teil lief mit dem richtigen Pfad durch.

    Status im Fixplan (security-fixplan-42-50.md, WP-B2 und Verdict-Landkarte) ist nachgezogen.

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