From f2ff550967660a611f8f28e9bd79d39bc007c104 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Wed, 9 Jan 2019 13:23:01 -0500 Subject: Fix handling of nil volumes Currently if a user passes in a -v with -v $bogus:/foobar We crash. This will throw a proper error. Signed-off-by: Daniel J Walsh --- cmd/podman/create_cli.go | 6 ++++++ test/e2e/run_test.go | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/cmd/podman/create_cli.go b/cmd/podman/create_cli.go index 1a0830f2e..95b9321fd 100644 --- a/cmd/podman/create_cli.go +++ b/cmd/podman/create_cli.go @@ -201,6 +201,9 @@ func parseVolumesFrom(volumesFrom []string) error { } func validateVolumeHostDir(hostDir string) error { + if len(hostDir) == 0 { + return errors.Errorf("host directory cannot be empty") + } if filepath.IsAbs(hostDir) { if _, err := os.Stat(hostDir); err != nil { return errors.Wrapf(err, "error checking path %q", hostDir) @@ -212,6 +215,9 @@ func validateVolumeHostDir(hostDir string) error { } func validateVolumeCtrDir(ctrDir string) error { + if len(ctrDir) == 0 { + return errors.Errorf("container directory cannot be empty") + } if !filepath.IsAbs(ctrDir) { return errors.Errorf("invalid container path, must be an absolute path %q", ctrDir) } diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go index a0b16a254..1e7f4f0f4 100644 --- a/test/e2e/run_test.go +++ b/test/e2e/run_test.go @@ -596,6 +596,21 @@ USER mail` Expect(session.ExitCode()).To(Equal(0)) }) + It("podman run --volumes flag with empty host dir", func() { + vol1 := filepath.Join(podmanTest.TempDir, "vol-test1") + err := os.MkdirAll(vol1, 0755) + Expect(err).To(BeNil()) + + session := podmanTest.Podman([]string{"run", "--volume", ":/myvol1:z", ALPINE, "touch", "/myvol2/foo.txt"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).ToNot(Equal(0)) + Expect(session.ErrorToString()).To(ContainSubstring("directory cannot be empty")) + session = podmanTest.Podman([]string{"run", "--volume", vol1 + ":", ALPINE, "touch", "/myvol2/foo.txt"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).ToNot(Equal(0)) + Expect(session.ErrorToString()).To(ContainSubstring("directory cannot be empty")) + }) + It("podman run --mount flag with multiple mounts", func() { vol1 := filepath.Join(podmanTest.TempDir, "vol-test1") err := os.MkdirAll(vol1, 0755) -- cgit v1.2.3-54-g00ecf