Repository navigation
fix(icon): pass file paths as plain argv to the icon helper (WP-B2, #45) - #155
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was
WP-B2 (#45): Der Icon-Loader übergibt den Pfad an den Python-Helfer jetzt als Daten im argv
— ohne eingebettete Quotes und ohne Shell. Der Quote-Strip-Shim im Helfer ist entfernt; der
Helfer reicht den Wert unverändert durch.
Beide Hälften des Paares mussten zusammen geändert werden: der Helfer hat den Wert bisher
umgeschrieben (
removeprefix("'")/removesuffix("'")). Ein Aufrufer, der den nackten Pfadübergibt — so wie der Loader jetzt — hätte bei einem Pfad, der mit einem Quote-Zeichen endet,
ein abgeschnittenes Pfad-Fragment bekommen.
lib/services/icon_loader.dart--file='<pfad>'→--file=<pfad>;runInShell: falsean allen drei Aufrufstellenadditional/python/get_icon_path_for_file.pytest/icon_loader_test.dart(neu)runInShellfalse an allen drei Stellenadditional/python/tests/test_icon_path_helper.py(neu)Gio.File.new_for_pathdurchZur Shell: sie war nie ein Split-Risiko. Dart quotet jedes argv-Element, ein Pfad mit
Leerzeichen bleibt also ein Argument — das habe ich mit einer Sonde gemessen, die die
Argumentanzahl zählt (nicht nur die Ausgabe vergleicht, was ein Argument mit Leerzeichen nicht
von zwei Argumenten unterscheiden kann). Die Shell war nur ein unnötiger Zwischenschritt;
runInShell: falseist das Muster, das die übrigen sechs Aufrufstellen inlinux.dartschonnutzen.
Verifiziert
TDD, beide Phasen getrennt gelaufen:
runInShelltrue an allen drei StellenGates am 2026-10-23 mit echten Exitcodes (Exitcode vor dem Piping gesichert):
bash tool/check-versions.shdart format --set-exit-if-changed lib testflutter analyzeflutter testpackages/la_core: analyze / format / testEnd-to-End mit echtem GI-Stack: der reale Helper wurde mit einem Pfad mit Leerzeichen und
einem Pfad mit abschließendem Quote aufgerufen. Beide Fälle scheitern erst im Gtk-Teil
(
Gtk.IconTheme.get_default()liefert ohne Displaynull) — der Gio-Teil(
new_for_path+query_info) lief also mit dem richtigen Pfad durch.Risk-Register
polkit-Trinität, keine Änderung an der Security-Invariante.
gleichzeitig geändert werden, bleibt das Ergebnis identisch — der Helfer entfernte vorher
genau die Quotes, die der Loader setzte.
hostOnFlatpakbleibt unverändert. Das gepackte Flatpak-Paket ist ohnehingeparkt (
packaging/unmaintained/); der gepflegte Weg ist das .deb.Paar war symmetrisch und lieferte für sich genommen das richtige Ergebnis — der Bruch wäre
erst entstanden, wenn nur eine Seite geändert worden wäre. Genau das ist der Grund, warum
die beiden Seiten zusammen geändert werden müssen.
Deferred
einem präparierten Dateinamen, Disk-Analyzer mit einem Mountpoint mit Metazeichen) brauchen
ein echtes Desktop-System. Probe 3 (die [MEDIUM] Linux command layer runs every command through a shell (runInShell defaults to true) — argument injection via file names and search keywords #42-Kontrolle) ist am 2026-10-23 empirisch erledigt.