You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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 dreiicon_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.
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.
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 dreiicon_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.
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.
Activity
Toqsick commentedon Oct 23, 2026
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
maingemerged ist — geschlossen wird nur, was nachweislich inmainist.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: falsean allen dreiicon_loader-Aufrufstellen (:50Ordner,:57App,:65Datei) — nicht nur am Datei-Zweig.additional/python/get_icon_path_for_file.pyist gleichzeitigentfernt. 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 einArgument,
runInShellfalse an allen drei Stellen. RED: 6 Failures.additional/python/tests/test_icon_path_helper.py(neu, 4 Tests) — der Helfer reicht den Wertunverändert an
Gio.File.new_for_pathdurch (GTK-Stack gemockt). RED: 2 Failures.Gates am 2026-10-23 (echte Exitcodes):
check-versions.shOK · Format-Gate 124 Dateien0 geändert ·
flutter analyzeNo issues found! ·flutter test230 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 isspace-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.
Toqsick commentedon Oct 23, 2026
Abnahme — erledigt (WP-B2)
PR #155 ist gemerged (
abf3465, 2026-10-23 21:04 UTC), Commit4049874(„fix(icon): pass filepaths as plain argv to the icon helper"). Das Work-Package ist damit abgeschlossen.
Scope laut Fixplan eingehalten:
runInShell: falsean allen dreiicon_loader-Aufrufstellen — nicht nur am Datei-ZweigTDD: RED 6 Failures (Dart) + 2 Failures (Python) → GREEN 7/7 + 4/4.
Gates am 2026-10-23 (echte Exitcodes):
check-versions.shOK · Format-Gate 124 Dateien0 geändert ·
flutter analyzeNo issues found! ·flutter test230 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.