diff options
author | Daniel Martí <mvdan@mvdan.cc> | 2019-10-13 22:33:18 +0100 |
---|---|---|
committer | Daniel Martí <mvdan@mvdan.cc> | 2019-10-14 22:39:28 +0000 |
commit | 1ed932d22b7f602d3aa0a4a5ab12ff479a2c1dce (patch) | |
tree | 3494bfb107b1cae5ac9d1906a8b467635e16b187 /src/cmd/go/internal/envcmd/env.go | |
parent | 90888ed97b5b3c0d104b2e9f28e5b74c1b0d07dd (diff) | |
download | go-1ed932d22b7f602d3aa0a4a5ab12ff479a2c1dce.tar.gz go-1ed932d22b7f602d3aa0a4a5ab12ff479a2c1dce.zip |
cmd/go: refuse -w with an invalid GO111MODULE
It was possible to get 'go env' to break itself:
$ go env -w GO111MODULE=bad
$ go env
go: unknown environment setting GO111MODULE=bad
We already check if the variable name is known. In some cases like
GO111MODULE, we also know what the variable's valid values are. Enforce
it when writing the variable, not just when fetching it.
Fixes #34880.
Change-Id: I10d682087c69f3445f314fd4473644f694e255f7
Reviewed-on: https://go-review.googlesource.com/c/go/+/200867
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/cmd/go/internal/envcmd/env.go')
-rw-r--r-- | src/cmd/go/internal/envcmd/env.go | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go index 17852deed1..b80b181642 100644 --- a/src/cmd/go/internal/envcmd/env.go +++ b/src/cmd/go/internal/envcmd/env.go @@ -343,6 +343,18 @@ func checkEnvWrite(key, val string, env []cfg.EnvVar) error { return fmt.Errorf("unknown go command variable %s", key) } + // Some variables can only have one of a few valid values. If set to an + // invalid value, the next cmd/go invocation might fail immediately, + // even 'go env -w' itself. + switch key { + case "GO111MODULE": + switch val { + case "", "auto", "on", "off": + default: + return fmt.Errorf("invalid %s value %q", key, val) + } + } + if !utf8.ValidString(val) { return fmt.Errorf("invalid UTF-8 in %s=... value", key) } |