mirror of
https://github.com/golang/go
synced 2024-11-19 10:04:56 -07:00
syscall: Clearenv now unsets env vars on Windows
Previously, `os.Clearenv()` (by way of `syscall.Clearenv`) would simply set all environment variables' values to `""` rather than actually unsetting them causing subsequent `os.LookupEnv` calls to return that they were still set. Fixes #17902 Change-Id: I54081b4b98665e9a39f55ea7582c8d40bb8a2a22 Reviewed-on: https://go-review.googlesource.com/33168 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
4a381e3ee3
commit
5f74ce394f
@ -95,6 +95,34 @@ func TestUnsetenv(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestClearenv(t *testing.T) {
|
||||
const testKey = "GO_TEST_CLEARENV"
|
||||
const testValue = "1"
|
||||
|
||||
// reset env
|
||||
defer func(origEnv []string) {
|
||||
for _, pair := range origEnv {
|
||||
// Environment variables on Windows can begin with =
|
||||
// http://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx
|
||||
i := strings.Index(pair[1:], "=") + 1
|
||||
if err := Setenv(pair[:i], pair[i+1:]); err != nil {
|
||||
t.Errorf("Setenv(%q, %q) failed during reset: %v", pair[:i], pair[i+1:], err)
|
||||
}
|
||||
}
|
||||
}(Environ())
|
||||
|
||||
if err := Setenv(testKey, testValue); err != nil {
|
||||
t.Fatalf("Setenv(%q, %q) failed: %v", testKey, testValue, err)
|
||||
}
|
||||
if _, ok := LookupEnv(testKey); !ok {
|
||||
t.Errorf("Setenv(%q, %q) didn't set $%s", testKey, testValue, testKey)
|
||||
}
|
||||
Clearenv()
|
||||
if val, ok := LookupEnv(testKey); ok {
|
||||
t.Errorf("Clearenv() didn't clear $%s, remained with value %q", testKey, val)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLookupEnv(t *testing.T) {
|
||||
const smallpox = "SMALLPOX" // No one has smallpox.
|
||||
value, ok := LookupEnv(smallpox) // Should not exist.
|
||||
|
@ -60,7 +60,7 @@ func Clearenv() {
|
||||
// http://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx
|
||||
for j := 1; j < len(s); j++ {
|
||||
if s[j] == '=' {
|
||||
Setenv(s[0:j], "")
|
||||
Unsetenv(s[0:j])
|
||||
break
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user