From: Roland Shoemaker Date: Fri, 2 Jun 2023 15:49:47 +0000 (-0700) Subject: syscall: don't panic when argv is nil on freebsd X-Git-Tag: go1.21rc1~104 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=96b79bd3208078835d6a1b9b8c7050554eccc734;p=gostls13.git syscall: don't panic when argv is nil on freebsd The workaround in CL 69970044 introduced a panic when StartProcess is called with empty argv. Check the length before trying to access it. Change-Id: Ic948d86c7067a21c484ba24e100d1f1f80179730 Reviewed-on: https://go-review.googlesource.com/c/go/+/500415 Run-TryBot: Roland Shoemaker TryBot-Result: Gopher Robot Reviewed-by: Ian Lance Taylor --- diff --git a/src/syscall/exec_unix.go b/src/syscall/exec_unix.go index 4b9c04db83..14edd023d3 100644 --- a/src/syscall/exec_unix.go +++ b/src/syscall/exec_unix.go @@ -165,7 +165,7 @@ func forkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err error) return 0, err } - if (runtime.GOOS == "freebsd" || runtime.GOOS == "dragonfly") && len(argv[0]) > len(argv0) { + if (runtime.GOOS == "freebsd" || runtime.GOOS == "dragonfly") && len(argv) > 0 && len(argv[0]) > len(argv0) { argvp[0] = argv0p } diff --git a/src/syscall/exec_unix_test.go b/src/syscall/exec_unix_test.go index 2e5e3df374..9627317bb3 100644 --- a/src/syscall/exec_unix_test.go +++ b/src/syscall/exec_unix_test.go @@ -387,3 +387,15 @@ func TestRlimitRestored(t *testing.T) { t.Errorf("exec rlimit = %d, want %d", v, orig) } } + +func TestForkExecNilArgv(t *testing.T) { + defer func() { + if p := recover(); p != nil { + t.Fatal("forkExec panicked") + } + }() + + // We don't really care what the result of forkExec is, just that it doesn't + // panic, so we choose something we know won't actually spawn a process (probably). + syscall.ForkExec("/dev/null", nil, nil) +}