]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.13] cmd/go: do not append to the global cfg.OrigEnv slice
authorBryan C. Mills <bcmills@google.com>
Thu, 26 Mar 2020 02:24:44 +0000 (22:24 -0400)
committerAndrew Bonventre <andybons@golang.org>
Thu, 26 Mar 2020 21:10:41 +0000 (21:10 +0000)
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

src/cmd/go/internal/generate/generate.go
src/cmd/go/internal/test/test.go

index f2ae80e5dc68f5e2764c07e6f2226fba743108ee..317d80204091bbf3eab9328cd531b9d7a3ccfbbd 100644 (file)
@@ -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)
index 8141e31c991aeebcb2b9cf119bd606aff622daa2..636d2fef55dab78c63c436d420355a545e22336b 100644 (file)
@@ -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