aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/exec_unix_test.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-05-01 12:26:30 -0700
committerIan Lance Taylor <iant@golang.org>2020-05-01 21:57:29 +0000
commitbe08e10b3bc07f3a4e7b27f44d53d582e15fd6c7 (patch)
treeab435cf12ffcc4264f2e4f6064f1788ac473f9b8 /src/syscall/exec_unix_test.go
parent5c8715f70adf13411668b8de76e5fef78c8e3f32 (diff)
downloadgo-be08e10b3bc07f3a4e7b27f44d53d582e15fd6c7.tar.xz
syscall: if Setctty, require that Ctty be a child descriptor
Ctty was always handled as a child descriptor, but in some cases passing a parent descriptor would also work. This depended on unpredictable details of the implementation. Reject those cases to avoid confusion. Also reject setting both Setctty and Foreground, as they use Ctty in incompatible ways. It's unlikely that any programs set both fields, as they don't make sense together. Fixes #29458 Change-Id: Ieba2d625711fd4b82c8e65e1feed02fd1fb25e6d Reviewed-on: https://go-review.googlesource.com/c/go/+/231638 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Damien Neil <dneil@google.com>
Diffstat (limited to 'src/syscall/exec_unix_test.go')
-rw-r--r--src/syscall/exec_unix_test.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/syscall/exec_unix_test.go b/src/syscall/exec_unix_test.go
index 33614f5221..4eb3c5c6c8 100644
--- a/src/syscall/exec_unix_test.go
+++ b/src/syscall/exec_unix_test.go
@@ -213,3 +213,31 @@ func TestForeground(t *testing.T) {
signal.Reset()
}
+
+// Test a couple of cases that SysProcAttr can't handle. Issue 29458.
+func TestInvalidExec(t *testing.T) {
+ t.Parallel()
+ t.Run("SetCtty-Foreground", func(t *testing.T) {
+ t.Parallel()
+ cmd := create(t)
+ cmd.proc.SysProcAttr = &syscall.SysProcAttr{
+ Setctty: true,
+ Foreground: true,
+ Ctty: 0,
+ }
+ if err := cmd.proc.Start(); err == nil {
+ t.Error("expected error setting both SetCtty and Foreground")
+ }
+ })
+ t.Run("invalid-Ctty", func(t *testing.T) {
+ t.Parallel()
+ cmd := create(t)
+ cmd.proc.SysProcAttr = &syscall.SysProcAttr{
+ Setctty: true,
+ Ctty: 3,
+ }
+ if err := cmd.proc.Start(); err == nil {
+ t.Error("expected error with invalid Ctty value")
+ }
+ })
+}