]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: make sure CC and CXX are absolute
authorObeyda Djeffal <djefobey@gmail.com>
Thu, 16 Apr 2020 11:45:37 +0000 (12:45 +0100)
committerJay Conrod <jayconrod@google.com>
Thu, 15 Oct 2020 15:40:06 +0000 (15:40 +0000)
Add check in cmd/go/internal/work.BuildInit and
cmd/go/internal/envcmd.checkEnvWrite.

Fixes #38372

Change-Id: I196ea93a0469e4667ef785f7c1dc4574bdf7ff78
Reviewed-on: https://go-review.googlesource.com/c/go/+/228517
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Trust: Jay Conrod <jayconrod@google.com>
Trust: Michael Matloob <matloob@golang.org>

src/cmd/go/internal/envcmd/env.go
src/cmd/go/internal/work/init.go
src/cmd/go/testdata/script/env_write.txt

index 59d0ded658e77a43fbb99193552b5e0e53f45f43..b5a48558fa54fd7e08af043b703b919b9f1c79d9 100644 (file)
@@ -424,6 +424,11 @@ func checkEnvWrite(key, val string) error {
                if !filepath.IsAbs(val) && val != "" {
                        return fmt.Errorf("GOPATH entry is relative; must be absolute path: %q", val)
                }
+       // Make sure CC and CXX are absolute paths
+       case "CC", "CXX":
+               if !filepath.IsAbs(val) && val != "" && val != filepath.Base(val) {
+                       return fmt.Errorf("%s entry is relative; must be absolute path: %q", key, val)
+               }
        }
 
        if !utf8.ValidString(val) {
index bab1935acaf7d7ffc163e41ef782ee3dfd117e65..81c4fb746571b299d40823190bfe8f39535bf114 100644 (file)
@@ -41,6 +41,13 @@ func BuildInit() {
                cfg.BuildPkgdir = p
        }
 
+       // Make sure CC and CXX are absolute paths
+       for _, key := range []string{"CC", "CXX"} {
+               if path := cfg.Getenv(key); !filepath.IsAbs(path) && path != "" && path != filepath.Base(path) {
+                       base.Fatalf("go %s: %s environment variable is relative; must be absolute path: %s\n", flag.Args()[0], key, path)
+               }
+       }
+
        // For each experiment that has been enabled in the toolchain, define a
        // build tag with the same name but prefixed by "goexperiment." which can be
        // used for compiling alternative files for the experiment. This allows
index bdb9bc4077c07d9b97831e83d66c0253b9fe7d35..24bb6f8f59d81fd4623c74fd3c9bd0a005610bf5 100644 (file)
@@ -123,6 +123,30 @@ go env -w GOTMPDIR=
 go env GOTMPDIR
 stdout ^$
 
+# go env -w rejects relative CC values
+[!windows] go env -w CC=/usr/bin/clang
+go env -w CC=clang
+[!windows] ! go env -w CC=./clang
+[!windows] ! go env -w CC=bin/clang
+[!windows] stderr 'go env -w: CC entry is relative; must be absolute path'
+
+[windows] go env -w CC=$WORK\bin\clang
+[windows] ! go env -w CC=.\clang
+[windows] ! go env -w CC=bin\clang
+[windows] stderr 'go env -w: CC entry is relative; must be absolute path'
+
+# go env -w rejects relative CXX values
+[!windows] go env -w CC=/usr/bin/cpp
+go env -w CXX=cpp
+[!windows] ! go env -w CXX=./cpp
+[!windows] ! go env -w CXX=bin/cpp
+[!windows] stderr 'go env -w: CXX entry is relative; must be absolute path'
+
+[windows] go env -w CXX=$WORK\bin\cpp
+[windows] ! go env -w CXX=.\cpp
+[windows] ! go env -w CXX=bin\cpp
+[windows] stderr 'go env -w: CXX entry is relative; must be absolute path'
+
 # go env -w/-u checks validity of GOOS/ARCH combinations
 env GOOS=
 env GOARCH=