diff --git a/components/engine/graph/list.go b/components/engine/graph/list.go index 63a906b9a9..49d4072be5 100644 --- a/components/engine/graph/list.go +++ b/components/engine/graph/list.go @@ -11,6 +11,8 @@ import ( "github.com/docker/docker/pkg/parsers/filters" ) +var acceptedImageFilterTags = map[string]struct{}{"dangling": {}} + func (s *TagStore) CmdImages(job *engine.Job) engine.Status { var ( allImages map[string]*image.Image @@ -22,6 +24,12 @@ func (s *TagStore) CmdImages(job *engine.Job) engine.Status { if err != nil { return job.Error(err) } + for name := range imageFilters { + if _, ok := acceptedImageFilterTags[name]; !ok { + return job.Errorf("Invalid filter '%s'", name) + } + } + if i, ok := imageFilters["dangling"]; ok { for _, value := range i { if strings.ToLower(value) == "true" { diff --git a/components/engine/integration-cli/docker_cli_images_test.go b/components/engine/integration-cli/docker_cli_images_test.go index 2758797fba..a91f1c0e22 100644 --- a/components/engine/integration-cli/docker_cli_images_test.go +++ b/components/engine/integration-cli/docker_cli_images_test.go @@ -67,6 +67,16 @@ func TestImagesOrderedByCreationDate(t *testing.T) { logDone("images - ordering by creation date") } +func TestImagesErrorWithInvalidFilterNameTest(t *testing.T) { + imagesCmd := exec.Command(dockerBinary, "images", "-f", "FOO=123") + out, _, err := runCommandWithOutput(imagesCmd) + if !strings.Contains(out, "Invalid filter") { + t.Fatalf("error should occur when listing images with invalid filter name FOO, %s, %v", out, err) + } + + logDone("images - invalid filter name check working") +} + func TestImagesFilterWhiteSpaceTrimmingAndLowerCasingWorking(t *testing.T) { imageName := "images_filter_test" defer deleteAllContainers()