From 81073a056160102b8a398dd8bf5c9f2cab3cc44d Mon Sep 17 00:00:00 2001 From: Marcin Niemira Date: Sat, 30 May 2020 20:34:53 +1000 Subject: [PATCH] use struct instead of map remove gosec warnings --- pkg/minikube/shell/shell.go | 105 ++++++++++++++++++------------- pkg/minikube/shell/shell_test.go | 4 +- 2 files changed, 65 insertions(+), 44 deletions(-) diff --git a/pkg/minikube/shell/shell.go b/pkg/minikube/shell/shell.go index 48dd615160..6749a66db0 100644 --- a/pkg/minikube/shell/shell.go +++ b/pkg/minikube/shell/shell.go @@ -28,48 +28,63 @@ import ( "github.com/docker/machine/libmachine/shell" ) -var shellConfigMap = map[string]map[string]string{ - "fish": { - "Prefix": "set -gx ", - "Suffix": "\";\n", // semi-colon required for fish 2.7 - "Delimiter": " \"", - "UnsetPrefix": "set -e ", - "UnsetSuffix": ";\n", +type shellData struct { + Prefix string + Suffix string + Delimiter string + UnsetPrefix string + UnsetSuffix string + UnsetDelimiter string +} + +var shellConfigMap = map[string]shellData{ + "fish": shellData{ + "set -gx ", + "\";\n", + " \"", + "set -e ", + ";\n", + " \"", }, - "powershell": { - "Prefix": "$Env:", - "Suffix": "\"\n", - "Delimiter": " = \"", - "UnsetPrefix": `Remove-Item Env:\\`, - "UnsetSuffix": "\n", + "powershell": shellData{ + "$Env:", + "\"\n", + " = \"", + `Remove-Item Env:\\`, + "\n", + " = \"", }, - "cmd": { - "Prefix": "SET ", - "Suffix": "\n", - "Delimiter": "=", - "UnsetPrefix": "SET ", - "UnsetSuffix": "\n", - "setDelim": "=", + "cmd": shellData{ + "SET ", + "\n", + "=", + "SET ", + "\n", + "=", }, - "emacs": { - "Prefix": "(setenv \"", - "Suffix": "\")\n", - "Delimiter": "\" \"", - "UnsetPrefix": "(setenv \"", - "UnsetSuffix": ")\n", - "UnsetDelim": "\" nil", + "emacs": shellData{ + "(setenv \"", + "\")\n", + "\" \"", + "(setenv \"", + ")\n", + "\" nil", }, - "bash": { - "Prefix": "export ", - "Suffix": "\"\n", - "Delimiter": "=\"", - "UnsetPrefix": "unset ", - "UnsetSuffix": "\n", + "bash": shellData{ + "export ", + "\"\n", + "=\"", + "unset ", + "\n", + "=\"", }, - "none": { - "Prefix": "", - "Suffix": "\n", - "Delimiter": "=", + "none": shellData{ + "", + "\n", + "=", + "", + "\n", + "=", }, } @@ -127,7 +142,7 @@ func CfgSet(ec EnvConfig, plz, cmd string) *Config { shellKey = "bash" } shellParams := shellConfigMap[shellKey] - s.Suffix, s.Prefix, s.Delimiter = shellParams["Suffix"], shellParams["Prefix"], shellParams["Delimiter"] + s.Suffix, s.Prefix, s.Delimiter = shellParams.Suffix, shellParams.Prefix, shellParams.Delimiter if shellKey != "none" { s.UsageHint = generateUsageHint(ec.Shell, plz, cmd) @@ -151,16 +166,22 @@ func SetScript(ec EnvConfig, w io.Writer, envTmpl string, data interface{}) erro func UnsetScript(ec EnvConfig, w io.Writer, vars []string) error { var sb strings.Builder shCfg := shellConfigMap[ec.Shell] - pfx, sfx, delim := shCfg["Prefix"], shCfg["Suffix"], shCfg["Delimiter"] + pfx, sfx, delim := shCfg.UnsetPrefix, shCfg.UnsetSuffix, shCfg.UnsetDelimiter switch ec.Shell { case "cmd", "emacs", "fish": for _, v := range vars { - sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx)) + if _, err := sb.WriteString(fmt.Sprintf("%s%s%s%s", pfx, v, delim, sfx)); err != nil { + return err + } } case "powershell": - sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx)) + if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " Env:\\\\"), sfx)); err != nil { + return err + } default: - sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx)) + if _, err := sb.WriteString(fmt.Sprintf("%s%s%s", pfx, strings.Join(vars, " "), sfx)); err != nil { + return err + } } _, err := w.Write([]byte(sb.String())) return err diff --git a/pkg/minikube/shell/shell_test.go b/pkg/minikube/shell/shell_test.go index bc066714d8..7c1895958a 100644 --- a/pkg/minikube/shell/shell_test.go +++ b/pkg/minikube/shell/shell_test.go @@ -68,8 +68,8 @@ func TestUnsetScript(t *testing.T) { ec EnvConfig expected string }{ - {[]string{"foo"}, EnvConfig{"bash"}, `export foo"`}, - {[]string{"bar"}, EnvConfig{"powershell"}, `$Env:bar"`}, + {[]string{"foo"}, EnvConfig{"bash"}, `unset foo`}, + {[]string{"bar"}, EnvConfig{"powershell"}, `Remove-Item Env:\\bar`}, {[]string{"baz"}, EnvConfig{"cmd"}, `SET baz=`}, } for _, tc := range testCases {