aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/runtime/cgo/gcc_setenv.c4
-rw-r--r--test/fixedbugs/issue36705.go27
2 files changed, 29 insertions, 2 deletions
diff --git a/src/runtime/cgo/gcc_setenv.c b/src/runtime/cgo/gcc_setenv.c
index 88e92bfd8a..d4f798357a 100644
--- a/src/runtime/cgo/gcc_setenv.c
+++ b/src/runtime/cgo/gcc_setenv.c
@@ -20,9 +20,9 @@ x_cgo_setenv(char **arg)
/* Stub for calling unsetenv */
void
-x_cgo_unsetenv(char *arg)
+x_cgo_unsetenv(char **arg)
{
_cgo_tsan_acquire();
- unsetenv(arg);
+ unsetenv(arg[0]);
_cgo_tsan_release();
}
diff --git a/test/fixedbugs/issue36705.go b/test/fixedbugs/issue36705.go
new file mode 100644
index 0000000000..83e4136845
--- /dev/null
+++ b/test/fixedbugs/issue36705.go
@@ -0,0 +1,27 @@
+// +build cgo
+// run
+
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+// #include <stdlib.h>
+// #include <unistd.h>
+import "C"
+
+import "os"
+
+func main() {
+ os.Setenv("FOO", "bar")
+ s := C.GoString(C.getenv(C.CString("FOO")))
+ if s != "bar" {
+ panic("bad setenv, environment variable only has value \"" + s + "\"")
+ }
+ os.Unsetenv("FOO")
+ s = C.GoString(C.getenv(C.CString("FOO")))
+ if s != "" {
+ panic("bad unsetenv, environment variable still has value \"" + s + "\"")
+ }
+}