aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/envcmd/env.go
diff options
context:
space:
mode:
authorjsign <jsign.uy@gmail.com>2019-11-09 14:41:09 +0000
committerBryan C. Mills <bcmills@google.com>2019-11-10 13:41:45 +0000
commit4d4ddd862d26766711d24b91d92cbc4ee2f8b648 (patch)
tree88523e432352e07480d6403b258bf8e809019631 /src/cmd/go/internal/envcmd/env.go
parent9eb9c7ba1c047c2463a524ea109c08b2dfbbb574 (diff)
downloadgo-4d4ddd862d26766711d24b91d92cbc4ee2f8b648.tar.gz
go-4d4ddd862d26766711d24b91d92cbc4ee2f8b648.zip
cmd/go: make env -w and -u validate GOOS and GOARCH values
This change makes go env -w and -u check invalid GOOS and GOARCH values and abort if that's the case. Fixes #34194 Change-Id: Idca8e93bb0b190fd273bf786c925be7993c24a2b GitHub-Last-Rev: ee67f09d75f4552001cb8b6506bc4af0894c9b05 GitHub-Pull-Request: golang/go#34221 Reviewed-on: https://go-review.googlesource.com/c/go/+/194617 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> 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.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go
index ff4a7e4a46..d2d5ed9507 100644
--- a/src/cmd/go/internal/envcmd/env.go
+++ b/src/cmd/go/internal/envcmd/env.go
@@ -8,6 +8,7 @@ package envcmd
import (
"encoding/json"
"fmt"
+ "go/build"
"io/ioutil"
"os"
"path/filepath"
@@ -249,6 +250,21 @@ func runEnv(cmd *base.Command, args []string) {
fmt.Fprintf(os.Stderr, "warning: go env -w %s=... does not override conflicting OS environment variable\n", key)
}
}
+
+ goos, okGOOS := add["GOOS"]
+ goarch, okGOARCH := add["GOARCH"]
+ if okGOOS || okGOARCH {
+ if !okGOOS {
+ goos = cfg.Goos
+ }
+ if !okGOARCH {
+ goarch = cfg.Goarch
+ }
+ if err := work.CheckGOOSARCHPair(goos, goarch); err != nil {
+ base.Fatalf("go env -w: %v", err)
+ }
+ }
+
updateEnvFile(add, nil)
return
}
@@ -265,6 +281,24 @@ func runEnv(cmd *base.Command, args []string) {
}
del[arg] = true
}
+ if del["GOOS"] || del["GOARCH"] {
+ goos, goarch := cfg.Goos, cfg.Goarch
+ if del["GOOS"] {
+ goos = getOrigEnv("GOOS")
+ if goos == "" {
+ goos = build.Default.GOOS
+ }
+ }
+ if del["GOARCH"] {
+ goarch = getOrigEnv("GOARCH")
+ if goarch == "" {
+ goarch = build.Default.GOARCH
+ }
+ }
+ if err := work.CheckGOOSARCHPair(goos, goarch); err != nil {
+ base.Fatalf("go env -u: %v", err)
+ }
+ }
updateEnvFile(nil, del)
return
}
@@ -331,6 +365,15 @@ func printEnvAsJSON(env []cfg.EnvVar) {
}
}
+func getOrigEnv(key string) string {
+ for _, v := range cfg.OrigEnv {
+ if strings.HasPrefix(v, key+"=") {
+ return strings.TrimPrefix(v, key+"=")
+ }
+ }
+ return ""
+}
+
func checkEnvWrite(key, val string) error {
switch key {
case "GOEXE", "GOGCCFLAGS", "GOHOSTARCH", "GOHOSTOS", "GOMOD", "GOTOOLDIR":