Bescherm de Windows-keten tegen MSYS-padvertaling #1598
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1598
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/windows-installer-msys"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Reparatie van wat proeftag
v0.4.7-rc1blootlegde (#1583). Die tag hing 1 uur 52 minuten op Inno Setup installeren en is handmatig afgebroken. Het log toonde twee regels goed werk — de gepinde download eninnosetup-7.1.0-x64.exe: OK— en daarna stilte, met bij het opruimen twee wees-processen: de installer en zijn.tmp-kind. Dat kind is de fase waarin Inno Setup zijn GUI heeft geopend.Oorzaak
MSYS-padvertaling. Git Bash vertaalt élk argument dat met
/begint naar een Windows-pad voordat een natief programma het ziet:/VERYSILENTkwam aan alsC:/Program Files/Git/VERYSILENT. Geen stille-modusvlag → venster → wachten op een klik die op een runner nooit komt.Drie plekken, waarvan twee nog nooit gedraaid
shell: pwsh+Start-Process -WaitISCC "/DAppVersion=…"(packager)msys_safe(MSYS_NO_PATHCONV + MSYS2_ARG_CONV_EXCL, per aanroep)signtool /sha1 /fd /tr …(packager)msys_safeDe
-Waitdekt een tweede val: Inno'ssetup.exekeert terug zodra zijn.tmp-kind draait, dus zonder wachten kan ISCC aangeroepen worden vóórdat de installatie af is — een race die zich soms als "ISCC bestaat niet" zou tonen.De signtool-route is de verraderlijkste van de drie: die is nooit gedraaid omdat er geen certificaat is. Zonder rc1 was die fout pas opgedoken op de dag dat het certificaat er wél was, en had hij eruitgezien als een certificaatprobleem.
Waarom de rooktoets dit niet ving
Die draaide op macOS met een nagemaakte
isccensigntool— vijf paden groen. MSYS-padvertaling bestaat daar niet. Precies daarvoor was de rc; de poort bewaakt daarom nu de vorm:pwsh+-Waitop de installatiestap,msys_safeom beide natieve aanroepen, en een hashvergelijking die een afwijking echt laat vallen (niet slechts afdrukt).Toetsen
make checkgroen: 9.9xx tests, dekking 87,3%, per-bestand-vloer 0.-Waitweg, hashvergelijking uitgezet.Vervolg
Na de merge gaat
v0.4.7-rc2naar de spiegel (alleen daarheen, zoals rc1) om de installerbouw nu echt te zien draaien.Vier gebreken die stil lagen omdat de route nog nooit draaide. De signtool-keuze pakte met sort -Vr juist de óúdste: het versieloze legacy-pad (bin/x64/) sorteert vóór de geversioneerde paden ('x' > '1'). Alles gaat nu in één signtool-aanroep — een hardwaretoken vraagt zijn PIN per áánroep, en twintig tijdstempelverzoeken in een salvo knijpt DigiCert per IP af — met drie herhaalpogingen voor de tijdstempel-hik die dan nog overblijft. data/app.so (de AOT-gecompileerde Dart-code: een PE-binary ondanks de extensie) en hoofdletter-DLL's tekenen mee. En de compiler krijgt het bewaakte bundelpad expliciet (/DBundleDir), dus een override wijzigt wat ingepakt wordt en niet alleen wat gecontroleerd werd. Rooktoetsen: batch (14 argumenten, één aanroep), hik-herstel (2 mislukkingen → slagen), blijvende storing (exit 1), en zonder certificaat ongewijzigd gedrag. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>Vijf commits erbij sinds de openingstekst: na de MSYS-reparatie is de hele keten adversarieel doorzocht op de rc1-klasse (fouten die alleen op Windows/CI opduiken). Eén bevinding is dubbel bevestigd, de rest aan de bron geverifieerd vóór reparatie.
Forge (
531768f7) —windows-ophalenkon de conclusie van een óúdere run op dezelfde tag lezen en een verse hertrigger binnen seconden doden; precies het herstelpad na rc1, met de URL van de vórige poging als dwaalspoor. Nu geankerd opcreated_attegen een T0; een oude conclusie betekent eenmalig herdispatchen in plaats vanexit 1. Plus curl-tijdslimieten entimeout-minutes: 75.Spiegel (
40455f8b) —timeout-minutes: 90; concurrency-groep met wachtrij (géén cancel: een geannuleerde run laat op de tag precies de conclusie achter die hierboven het dwaalspoor was); tag-wacht opworkflow_dispatch; en-PassThru+ExitCode -ne 0op de stille installatie, want/SUPPRESSMSGBOXESonderdrukt juist de foutvensters..iss(74c663f3) — de belangrijkste stille:ValueType: noneschrijft volgens de Inno-handleiding géén waarde, dus de beloofde "Openen met…"-vermelding voor.mdheeft nooit bestaan. Nu een lege REG_SZ met de ProgID als naam. PlusChangesAssociations=yesen een overschrijfbareBundleDir.Packager (
be620364) — de signeerroute (nooit gedraaid, geen certificaat) droeg vier gebreken die anders op signeerdag waren opgedoken:sort -Vrkoos juist de óúdste signtool, twintig losse aanroepen betekenden twintig PIN-prompts en een tijdstempel-salvo dat DigiCert afknijpt,data/app.soen hoofdletter-DLL's tekenden niet mee. Nu één batchaanroep met herhaalpoging; rookgetoetst in beide richtingen.Poort (
346d91c5) — de jacht wees ook twee zwaktes in de poort zelf aan: het volgorde-anker matchte een commentaarregel, en de stille-modusvlaggen waren ongepind. Poort nu 28 controles; acht nieuwe mutaties, acht betrapt — waaronder één die mijn eigen te zwakkeExitCode-assertie betrapte.Bewust doorgeschoven, met redenen: #1600 (uninstaller-ondertekening op signeerdag, LicenseFile-cosmetiek, het .reg-padcontrast, en een voorbestaand verwijder-vóór-upload-punt in
publiceren).