]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.14] 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:36 +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 #38083
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/+/225659

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

index 198ca1c1b9486703aebb1c4381b2d9af23e85f13..315db69de8a56b2fb522a39dfd408a61009192f4 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 a89965f00aaadde5d955b365d9edb1bd908000fb..4ad142ccd874886d2acf0cc0272164f408dfa789 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