From c1ddff67f2f4fb7ec08c1481135b442a03762e5e Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 31 Oct 2024 08:33:00 -0400 Subject: ci: use JSON to transfer environment variables The `set` command in `cmd` has terrible properties in that there's no real structure to it. Sensitive sequences in values or variable names that are escaping sequences can be interpreted at the wrong time or things like newlines in values are not escaped at all and cause ambiguities in parsing. Avoid all of that and use PowerShell to use JSON as a communication mechanism. --- .gitlab/ci/vcvarsall.ps1 | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.gitlab/ci/vcvarsall.ps1 b/.gitlab/ci/vcvarsall.ps1 index f91b100..f8c4150 100644 --- a/.gitlab/ci/vcvarsall.ps1 +++ b/.gitlab/ci/vcvarsall.ps1 @@ -1,9 +1,7 @@ $erroractionpreference = "stop" -cmd /c "`"$env:VCVARSALL`" $env:VCVARSPLATFORM -vcvars_ver=$env:VCVARSVERSION & set" | -foreach { - if ($_ -match "=") { - $v = $_.split("=") - [Environment]::SetEnvironmentVariable($v[0], $v[1]) - } +$all_env = cmd /c "`"$env:VCVARSALL`" $env:VCVARSPLATFORM -vcvars_ver=$env:VCVARSVERSION >NUL & powershell -Command `"Get-ChildItem env: | Select-Object -Property Key,Value | ConvertTo-Json`"" | ConvertFrom-Json + +foreach ($envvar in $all_env) { + [Environment]::SetEnvironmentVariable($envvar.Key, $envvar.Value) } -- cgit v0.12