From 5f74ce394f02714a88dd375f54e8709ce58d1805 Mon Sep 17 00:00:00 2001 From: Jesse Szwedko Date: Sun, 13 Nov 2016 13:29:19 -0800 Subject: [PATCH] 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 Reviewed-by: Alex Brainman --- src/os/env_test.go | 28 ++++++++++++++++++++++++++++ src/syscall/env_windows.go | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/os/env_test.go b/src/os/env_test.go index d1074cdc60af11..e5749f0e899611 100644 --- a/src/os/env_test.go +++ b/src/os/env_test.go @@ -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. diff --git a/src/syscall/env_windows.go b/src/syscall/env_windows.go index 3f751678ccb333..1606b424ca0efe 100644 --- a/src/syscall/env_windows.go +++ b/src/syscall/env_windows.go @@ -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 } }