aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2020-03-25 22:24:44 -0400
committerAndrew Bonventre <andybons@golang.org>2020-03-26 21:10:41 +0000
commitb2797dc8739d19ed788357df852daa332f632853 (patch)
tree783d48ff010097df1e72e84f48ca291bb90bc288
parentd6224d3807534d1d6638e5bbd1d5a1ce23e99ec9 (diff)
downloadgo-b2797dc8739d19ed788357df852daa332f632853.tar.gz
go-b2797dc8739d19ed788357df852daa332f632853.zip
[release-branch.go1.13] cmd/go: do not append to the global cfg.OrigEnv slice
Appending to a global slice is only safe if its length is already equal to its capacity. That property is not guaranteed for slices in general, and empirically does not hold for this one. This is a minimal fix to make it easier to backport. A more robust cleanup of the base.EnvForDir function will be sent in a subsequent CL. Fixes #38082 Updates #38077 Change-Id: I731d5bbd0e516642c2cf43e713eeea15402604e5 Reviewed-on: https://go-review.googlesource.com/c/go/+/225577 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com> Reviewed-by: Michael Matloob <matloob@golang.org> (cherry picked from commit bfb1342a40216cba0ff5ae3a1b102823b7603068) Reviewed-on: https://go-review.googlesource.com/c/go/+/225660
-rw-r--r--src/cmd/go/internal/generate/generate.go3
-rw-r--r--src/cmd/go/internal/test/test.go2
2 files changed, 3 insertions, 2 deletions
diff --git a/src/cmd/go/internal/generate/generate.go b/src/cmd/go/internal/generate/generate.go
index f2ae80e5dc..317d802040 100644
--- a/src/cmd/go/internal/generate/generate.go
+++ b/src/cmd/go/internal/generate/generate.go
@@ -22,6 +22,7 @@ import (
"cmd/go/internal/cfg"
"cmd/go/internal/load"
"cmd/go/internal/modload"
+ "cmd/go/internal/str"
"cmd/go/internal/work"
)
@@ -438,7 +439,7 @@ func (g *Generator) exec(words []string) {
cmd.Stderr = os.Stderr
// Run the command in the package directory.
cmd.Dir = g.dir
- cmd.Env = append(cfg.OrigEnv, g.env...)
+ cmd.Env = str.StringList(cfg.OrigEnv, g.env)
err := cmd.Run()
if err != nil {
g.errorf("running %q: %s", words[0], err)
diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go
index 8141e31c99..636d2fef55 100644
--- a/src/cmd/go/internal/test/test.go
+++ b/src/cmd/go/internal/test/test.go
@@ -1142,7 +1142,7 @@ func (c *runCache) builderRunTest(b *work.Builder, a *work.Action) error {
cmd := exec.Command(args[0], args[1:]...)
cmd.Dir = a.Package.Dir
- cmd.Env = base.EnvForDir(cmd.Dir, cfg.OrigEnv)
+ cmd.Env = base.EnvForDir(cmd.Dir, cfg.OrigEnv[:len(cfg.OrigEnv):len(cfg.OrigEnv)])
cmd.Stdout = stdout
cmd.Stderr = stdout