sweet: shell-quote environment variable values in -shell log Currently the environment variable values printed when -shell is passed aren't shell-quoted. As a result, the command produced by -shell may be not directly usable in some circumstances. Fix this by running shellquote.Join on the variable. Change-Id: I77a136c27cbd31388697bdd54927dd40d40535e5 Reviewed-on: https://go-review.googlesource.com/c/benchmarks/+/614539 Reviewed-by: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/sweet/common/log/log.go b/sweet/common/log/log.go index 0ff58be..ffa99bd 100644 --- a/sweet/common/log/log.go +++ b/sweet/common/log/log.go
@@ -5,6 +5,7 @@ package log import ( + "fmt" "log" "os" "os/exec" @@ -47,7 +48,7 @@ actOn = on } -func filterEnviron(env []string) []string { +func filterAndQuoteEnviron(env []string) []string { fenv := make([]string, 0, len(env)) for _, e := range env { s := strings.SplitN(e, "=", 2) @@ -57,7 +58,7 @@ if v, ok := envMap[s[0]]; ok && v == s[1] { continue } - fenv = append(fenv, e) + fenv = append(fenv, fmt.Sprintf("%s=%s", s[0], shellquote.Join(s[1]))) } return fenv } @@ -68,7 +69,7 @@ } senv := "" if len(cmd.Env) != 0 { - senv = strings.Join(filterEnviron(cmd.Env), " ") + senv = strings.Join(filterAndQuoteEnviron(cmd.Env), " ") } if cmd.Dir != "" { cmdLog.Printf("pushd %s", cmd.Dir)