1
0
mirror of https://github.com/golang/go synced 2024-11-23 14:40:02 -07:00

cmd/dist: require absolute path to executable in flattenCommandLine

This should help to prevent bugs from unintended use of system tools,
especially the system or bootstrap "go" command.
(Suggested by Austin on CL 452678.)

Updates #31567.

Change-Id: I71809ee30d06eda4b5ff8f90656d4f1a462d35dd
Reviewed-on: https://go-review.googlesource.com/c/go/+/452776
Reviewed-by: Austin Clements <austin@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
This commit is contained in:
Bryan C. Mills 2022-11-22 13:45:12 -05:00 committed by Gopher Robot
parent 6f6276ce36
commit 8e0781e5ff

25
src/cmd/dist/test.go vendored
View File

@ -1077,6 +1077,9 @@ func flattenCmdline(cmdline []interface{}) (bin string, args []string) {
} }
bin = list[0] bin = list[0]
if !filepath.IsAbs(bin) {
panic("command is not absolute: " + bin)
}
return bin, list[1:] return bin, list[1:]
} }
@ -1300,16 +1303,24 @@ func (t *tester) registerCgoTests() {
default: default:
// Check for static linking support // Check for static linking support
var staticCheck rtPreFunc var staticCheck rtPreFunc
cmd := t.dirCmd("misc/cgo/test", ccName := compilerEnvLookup("CC", defaultcc, goos, goarch)
compilerEnvLookup("CC", defaultcc, goos, goarch), "-xc", "-o", "/dev/null", "-static", "-") cc, err := exec.LookPath(ccName)
cmd.Stdin = strings.NewReader("int main() {}") if err != nil {
cmd.Stdout, cmd.Stderr = nil, nil // Discard output
if err := cmd.Run(); err != nil {
// Skip these tests
staticCheck.pre = func(*distTest) bool { staticCheck.pre = func(*distTest) bool {
fmt.Println("No support for static linking found (lacks libc.a?), skip cgo static linking test.") fmt.Printf("$CC (%q) not found, skip cgo static linking test.\n", ccName)
return false return false
} }
} else {
cmd := t.dirCmd("misc/cgo/test", cc, "-xc", "-o", "/dev/null", "-static", "-")
cmd.Stdin = strings.NewReader("int main() {}")
cmd.Stdout, cmd.Stderr = nil, nil // Discard output
if err := cmd.Run(); err != nil {
// Skip these tests
staticCheck.pre = func(*distTest) bool {
fmt.Println("No support for static linking found (lacks libc.a?), skip cgo static linking test.")
return false
}
}
} }
// Static linking tests // Static linking tests