]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: ignore GOFLAGS values without name in go env/bug
authorObeyda Djeffal <djefobey@gmail.com>
Fri, 16 Oct 2020 15:34:15 +0000 (16:34 +0100)
committerBryan C. Mills <bcmills@google.com>
Wed, 21 Oct 2020 15:03:58 +0000 (15:03 +0000)
This happens with 'go env' and 'go bug'.

If GOFLAGS variable is set to something like '=value',
running `go env` panics with this error message:

    goroutine 1 [running]:
    cmd/go/internal/base.SetFromGOFLAGS(0xd96838)
        cmd/go/internal/base/goflags.go:101 +0x9a7
    main.main()
        cmd/go/main.go:188 +0x755

This happens when the 'name' of the flag is not
specified ('=' or '=value'), with any combination of other flags.
Other commands show this error message:
    go: parsing $GOFLAGS: non-flag

This happens only with 'env' and 'bug' because we have this:
https://go.googlesource.com/go/+/refs/heads/master/src/cmd/go/internal/base/goflags.go#40

New behaviour: ignore the bad flag, since we don't want to report
that with `go env` or `go bug`.

Fixes: #42013
Change-Id: I72602840ca00293d2a92ea28451b75b9799e3d6c
Reviewed-on: https://go-review.googlesource.com/c/go/+/263098
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Michael Matloob <matloob@golang.org>

src/cmd/go/internal/base/goflags.go
src/cmd/go/testdata/script/env_write.txt

index 4da27550fd3a4f9422a7fceac3adb1b688e83562..267006be7a2a8646dd53add4dc9f3e59cb76aa61 100644 (file)
@@ -92,7 +92,11 @@ func SetFromGOFLAGS(flags *flag.FlagSet) {
        }
        for _, goflag := range goflags {
                name, value, hasValue := goflag, "", false
-               if i := strings.Index(goflag, "="); i >= 0 {
+               // Ignore invalid flags like '=' or '=value'.
+               // If it is not reported in InitGOFlags it means we don't want to report it.
+               if i := strings.Index(goflag, "="); i == 0 {
+                       continue
+               } else if i > 0 {
                        name, value, hasValue = goflag[:i], goflag[i+1:], true
                }
                if strings.HasPrefix(name, "--") {
index 24bb6f8f59d81fd4623c74fd3c9bd0a005610bf5..0af22ed421c24d4425af5839b689ab4742cf7aec 100644 (file)
@@ -24,6 +24,10 @@ stdout GOARCH=
 stdout GOOS=
 stdout GOROOT=
 
+# go env ignores invalid flag in GOFLAGS environment variable
+env GOFLAGS='=true'
+go env
+
 # checking errors
 ! go env -w
 stderr 'go env -w: no KEY=VALUE arguments given'