Fix PowerShell checksum parsing
- commit
- caac4915edc5e3005f86b49a0b5c670924c86220
- author
- patriceckhart · · 2026-05-07 16:54 UTC
- parent
- 528ecf2
- signature
- unsigned
- refs
- tag: v0.1.64
1 file · +9 -2
M install.ps1 +9 -2
| @@ -91,8 +91,15 @@ try { | |||
| 91 | 91 | Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $archiveUrl -OutFile (Join-Path $tmp $archive) | |
| 92 | 92 | ||
| 93 | 93 | Msg "verifying checksum" | |
| 94 | - | $checksums = Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $checksumUrl | Select-Object -ExpandProperty Content | |
| 95 | - | $expected = ($checksums -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ -match ("\s" + [regex]::Escape($archive) + "$") } | Select-Object -First 1) | |
| 94 | + | $checksumFile = Join-Path $tmp "checksums.txt" | |
| 95 | + | Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $checksumUrl -OutFile $checksumFile | |
| 96 | + | $expected = Get-Content -LiteralPath $checksumFile | ForEach-Object { | |
| 97 | + | $line = $_.Trim() | |
| 98 | + | if ($line) { | |
| 99 | + | $parts = $line -split "\s+" | |
| 100 | + | if ($parts.Count -ge 2 -and $parts[($parts.Count - 1)] -eq $archive) { $line } | |
| 101 | + | } | |
| 102 | + | } | Select-Object -First 1 | |
| 96 | 103 | if (-not $expected) { Die "no checksum for $archive in checksums.txt" } | |
| 97 | 104 | $expectedHash = ($expected -split "\s+")[0] | |
| 98 | 105 | ||
| @@ -91,8 +91,15 @@ try { | |||||
| 91 | Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $archiveUrl -OutFile (Join-Path $tmp $archive) | 91 | Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $archiveUrl -OutFile (Join-Path $tmp $archive) | ||
| 92 | 92 | ||||
| 93 | Msg "verifying checksum" | 93 | Msg "verifying checksum" | ||
| 94 | - | $checksums = Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $checksumUrl | Select-Object -ExpandProperty Content | 94 | + | $checksumFile = Join-Path $tmp "checksums.txt" |
| 95 | - | $expected = ($checksums -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ -match ("\s" + [regex]::Escape($archive) + "$") } | Select-Object -First 1) | 95 | + | Invoke-WebRequest -UseBasicParsing -Headers $headers -Uri $checksumUrl -OutFile $checksumFile |
| 96 | + | $expected = Get-Content -LiteralPath $checksumFile | ForEach-Object { | |||
| 97 | + | $line = $_.Trim() | |||
| 98 | + | if ($line) { | |||
| 99 | + | $parts = $line -split "\s+" | |||
| 100 | + | if ($parts.Count -ge 2 -and $parts[($parts.Count - 1)] -eq $archive) { $line } | |||
| 101 | + | } | |||
| 102 | + | } | Select-Object -First 1 | |||
| 96 | if (-not $expected) { Die "no checksum for $archive in checksums.txt" } | 103 | if (-not $expected) { Die "no checksum for $archive in checksums.txt" } | ||
| 97 | $expectedHash = ($expected -split "\s+")[0] | 104 | $expectedHash = ($expected -split "\s+")[0] | ||
| 98 | 105 | ||||