From 97776ba1c96026eafbf4e74283954d45851b2858 Mon Sep 17 00:00:00 2001 From: Wes McKinney Date: Sat, 8 Aug 2026 06:34:56 -0500 Subject: [PATCH] fix(selfupdate): accept dot-slash checksum paths The self-update checksum parser promises sha256sum-style input, but GNU sha256sum emits ./-prefixed names when invoked with a ./ glob. Exact filename matching then discarded valid checksums and caused updates to fail before archive download. Normalize one leading ./ after the optional binary-mode marker while preserving strict asset-name matching. Generated with Codex --- selfupdate/selfupdate.go | 1 + selfupdate/selfupdate_test.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/selfupdate/selfupdate.go b/selfupdate/selfupdate.go index 1a0edfb..cd033d1 100644 --- a/selfupdate/selfupdate.go +++ b/selfupdate/selfupdate.go @@ -657,6 +657,7 @@ func ExtractChecksum(body, assetName string) string { continue } fname := strings.TrimPrefix(fields[1], "*") + fname = strings.TrimPrefix(fname, "./") if fname == assetName { if match := re.FindString(fields[0]); match != "" { return strings.ToLower(match) diff --git a/selfupdate/selfupdate_test.go b/selfupdate/selfupdate_test.go index 3696bb7..b3c514c 100644 --- a/selfupdate/selfupdate_test.go +++ b/selfupdate/selfupdate_test.go @@ -1786,6 +1786,8 @@ func TestExtractChecksum(t *testing.T) { {"no match", fmt.Sprintf("%s tool_linux_amd64.tar.gz", testHash64), "tool_darwin_arm64.tar.gz", ""}, {"substring filename", fmt.Sprintf("%s tool_darwin_arm64.tar.gz.sig", testHash64), "tool_darwin_arm64.tar.gz", ""}, {"binary star", fmt.Sprintf("%s *tool_darwin_arm64.tar.gz", testHash64), "tool_darwin_arm64.tar.gz", testHash64}, + {"leading dot slash", fmt.Sprintf("%s ./tool_darwin_arm64.tar.gz", testHash64), "tool_darwin_arm64.tar.gz", testHash64}, + {"binary star leading dot slash", fmt.Sprintf("%s *./tool_darwin_arm64.tar.gz", testHash64), "tool_darwin_arm64.tar.gz", testHash64}, {"trailing comment", fmt.Sprintf("%s tool_darwin_arm64.tar.gz # comment", testHash64), "tool_darwin_arm64.tar.gz", testHash64}, }