diff options
author | Valentin Rothberg <vrothberg@suse.com> | 2018-10-17 09:25:26 +0200 |
---|---|---|
committer | Valentin Rothberg <vrothberg@suse.com> | 2018-10-23 12:57:14 +0200 |
commit | 125202923f00f43fd102760b3340b86dd72a4c7d (patch) | |
tree | 5af0be5d57c87fa593dfc66ac4c4047370a87d5b | |
parent | 58a26ac9dcb0d75ca7f061941c1399a28579ed69 (diff) | |
download | podman-125202923f00f43fd102760b3340b86dd72a4c7d.tar.gz podman-125202923f00f43fd102760b3340b86dd72a4c7d.tar.bz2 podman-125202923f00f43fd102760b3340b86dd72a4c7d.zip |
fix environment variable parsing
Fix the parsing of environment variables to catch invalid ones, such as
`-e = ` or `-e =A`, early in the stack to return meaningful error
messages. Also, instead of erroring out, set unspecified env variables
as empty (e.g., `-e FOO`) to remain compatible with Docker.
Fixes: #1663
Signed-off-by: Valentin Rothberg <vrothberg@suse.com>
-rw-r--r-- | cmd/podman/create_cli_test.go | 2 | ||||
-rw-r--r-- | cmd/podman/parse.go | 10 |
2 files changed, 7 insertions, 5 deletions
diff --git a/cmd/podman/create_cli_test.go b/cmd/podman/create_cli_test.go index fa128c8e6..9db007ff3 100644 --- a/cmd/podman/create_cli_test.go +++ b/cmd/podman/create_cli_test.go @@ -47,7 +47,7 @@ func TestGetAllLabels(t *testing.T) { } func TestGetAllLabelsBadKeyValue(t *testing.T) { - inLabels := []string{"ONE1", "TWO=2"} + inLabels := []string{"=badValue", "="} fileLabels := []string{} _, err := getAllLabels(fileLabels, inLabels) assert.Error(t, err, assert.AnError) diff --git a/cmd/podman/parse.go b/cmd/podman/parse.go index ade592ddf..2e4959656 100644 --- a/cmd/podman/parse.go +++ b/cmd/podman/parse.go @@ -198,6 +198,11 @@ func readKVStrings(env map[string]string, files []string, override []string) err func parseEnv(env map[string]string, line string) error { data := strings.SplitN(line, "=", 2) + // catch invalid variables such as "=" or "=A" + if data[0] == "" { + return errors.Errorf("invalid environment variable: %q", line) + } + // trim the front of a variable, but nothing else name := strings.TrimLeft(data[0], whiteSpaces) if strings.ContainsAny(name, whiteSpaces) { @@ -208,10 +213,7 @@ func parseEnv(env map[string]string, line string) error { env[name] = data[1] } else { // if only a pass-through variable is given, clean it up. - val, exists := os.LookupEnv(name) - if !exists { - return errors.Errorf("environment variable %q does not exist", name) - } + val, _ := os.LookupEnv(name) env[name] = val } return nil |