From 0be9887afca0028ddfae1108928ba456d6ebc614 Mon Sep 17 00:00:00 2001
From: Luca Di Maio <luca.dimaio1@gmail.com>
Date: Thu, 25 May 2023 16:53:14 +0200
Subject: [PATCH 1/3] fix: move filter flags from StringSliceVar to
 StringArrayVar

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
---
 cmd/podman/containers/pause.go   | 2 +-
 cmd/podman/containers/ps.go      | 2 +-
 cmd/podman/containers/restart.go | 2 +-
 cmd/podman/containers/rm.go      | 2 +-
 cmd/podman/containers/start.go   | 2 +-
 cmd/podman/containers/stop.go    | 2 +-
 cmd/podman/containers/unpause.go | 2 +-
 cmd/podman/images/list.go        | 2 +-
 cmd/podman/images/search.go      | 2 +-
 cmd/podman/pods/ps.go            | 2 +-
 cmd/podman/secrets/list.go       | 2 +-
 cmd/podman/volumes/list.go       | 2 +-
 12 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/cmd/podman/containers/pause.go b/cmd/podman/containers/pause.go
index 3dd6585958..4b0ae5fe36 100644
--- a/cmd/podman/containers/pause.go
+++ b/cmd/podman/containers/pause.go
@@ -63,7 +63,7 @@ func pauseFlags(cmd *cobra.Command) {
 	_ = cmd.RegisterFlagCompletionFunc(cidfileFlagName, completion.AutocompleteDefault)
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	if registry.IsRemote() {
diff --git a/cmd/podman/containers/ps.go b/cmd/podman/containers/ps.go
index 6487f0fe21..05df8faa6e 100644
--- a/cmd/podman/containers/ps.go
+++ b/cmd/podman/containers/ps.go
@@ -76,7 +76,7 @@ func listFlagSet(cmd *cobra.Command) {
 	flags.BoolVar(&listOpts.External, "external", false, "Show containers in storage not controlled by Podman")
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	formatFlagName := "format"
diff --git a/cmd/podman/containers/restart.go b/cmd/podman/containers/restart.go
index b4886575a2..83b9cda142 100644
--- a/cmd/podman/containers/restart.go
+++ b/cmd/podman/containers/restart.go
@@ -66,7 +66,7 @@ func restartFlags(cmd *cobra.Command) {
 	_ = cmd.RegisterFlagCompletionFunc(cidfileFlagName, completion.AutocompleteDefault)
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	timeFlagName := "time"
diff --git a/cmd/podman/containers/rm.go b/cmd/podman/containers/rm.go
index fcd9935fc6..7bb90d3c60 100644
--- a/cmd/podman/containers/rm.go
+++ b/cmd/podman/containers/rm.go
@@ -75,7 +75,7 @@ func rmFlags(cmd *cobra.Command) {
 	_ = cmd.RegisterFlagCompletionFunc(cidfileFlagName, completion.AutocompleteDefault)
 
 	filterFlagName := "filter"
-	flags.StringSliceVar(&filters, filterFlagName, []string{}, "Filter output based on conditions given")
+	flags.StringArrayVar(&filters, filterFlagName, []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	if !registry.IsRemote() {
diff --git a/cmd/podman/containers/start.go b/cmd/podman/containers/start.go
index b67a5ae547..1e1f68f72d 100644
--- a/cmd/podman/containers/start.go
+++ b/cmd/podman/containers/start.go
@@ -61,7 +61,7 @@ func startFlags(cmd *cobra.Command) {
 	flags.BoolVar(&startOptions.SigProxy, "sig-proxy", false, "Proxy received signals to the process (default true if attaching, false otherwise)")
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	flags.BoolVar(&startOptions.All, "all", false, "Start all containers regardless of their state or configuration")
diff --git a/cmd/podman/containers/stop.go b/cmd/podman/containers/stop.go
index a03f681fbe..2afcfdb2b5 100644
--- a/cmd/podman/containers/stop.go
+++ b/cmd/podman/containers/stop.go
@@ -71,7 +71,7 @@ func stopFlags(cmd *cobra.Command) {
 	_ = cmd.RegisterFlagCompletionFunc(timeFlagName, completion.AutocompleteNone)
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	if registry.IsRemote() {
diff --git a/cmd/podman/containers/unpause.go b/cmd/podman/containers/unpause.go
index 00f2294472..68ef8e1f54 100644
--- a/cmd/podman/containers/unpause.go
+++ b/cmd/podman/containers/unpause.go
@@ -64,7 +64,7 @@ func unpauseFlags(cmd *cobra.Command) {
 	_ = cmd.RegisterFlagCompletionFunc(cidfileFlagName, completion.AutocompleteDefault)
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&filters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePsFilters)
 
 	if registry.IsRemote() {
diff --git a/cmd/podman/images/list.go b/cmd/podman/images/list.go
index 1c464d91c6..d8804e8a56 100644
--- a/cmd/podman/images/list.go
+++ b/cmd/podman/images/list.go
@@ -89,7 +89,7 @@ func imageListFlagSet(cmd *cobra.Command) {
 	flags.BoolVarP(&listOptions.All, "all", "a", false, "Show all images (default hides intermediate images)")
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&listOptions.Filter, filterFlagName, "f", []string{}, "Filter output based on conditions provided (default [])")
+	flags.StringArrayVarP(&listOptions.Filter, filterFlagName, "f", []string{}, "Filter output based on conditions provided (default [])")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompleteImageFilters)
 
 	formatFlagName := "format"
diff --git a/cmd/podman/images/search.go b/cmd/podman/images/search.go
index 5e41ee1853..f88f8df042 100644
--- a/cmd/podman/images/search.go
+++ b/cmd/podman/images/search.go
@@ -84,7 +84,7 @@ func searchFlags(cmd *cobra.Command) {
 	flags := cmd.Flags()
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&searchOptions.Filters, filterFlagName, "f", []string{}, "Filter output based on conditions provided (default [])")
+	flags.StringArrayVarP(&searchOptions.Filters, filterFlagName, "f", []string{}, "Filter output based on conditions provided (default [])")
 	_ = cmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompleteImageSearchFilters)
 
 	formatFlagName := "format"
diff --git a/cmd/podman/pods/ps.go b/cmd/podman/pods/ps.go
index 405d7cdc03..893058643e 100644
--- a/cmd/podman/pods/ps.go
+++ b/cmd/podman/pods/ps.go
@@ -53,7 +53,7 @@ func init() {
 	flags.BoolVar(&psInput.CtrStatus, "ctr-status", false, "Display the container status")
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&inputFilters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
+	flags.StringArrayVarP(&inputFilters, filterFlagName, "f", []string{}, "Filter output based on conditions given")
 	_ = psCmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompletePodPsFilters)
 
 	formatFlagName := "format"
diff --git a/cmd/podman/secrets/list.go b/cmd/podman/secrets/list.go
index f028442bca..382e0b820f 100644
--- a/cmd/podman/secrets/list.go
+++ b/cmd/podman/secrets/list.go
@@ -50,7 +50,7 @@ func init() {
 	_ = lsCmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(&entities.SecretInfoReport{}))
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&listFlag.filter, filterFlagName, "f", []string{}, "Filter secret output")
+	flags.StringArrayVarP(&listFlag.filter, filterFlagName, "f", []string{}, "Filter secret output")
 	_ = lsCmd.RegisterFlagCompletionFunc(filterFlagName, common.AutocompleteSecretFilters)
 
 	noHeadingFlagName := "noheading"
diff --git a/cmd/podman/volumes/list.go b/cmd/podman/volumes/list.go
index 6afb9f66ea..28f0669638 100644
--- a/cmd/podman/volumes/list.go
+++ b/cmd/podman/volumes/list.go
@@ -51,7 +51,7 @@ func init() {
 	flags := lsCommand.Flags()
 
 	filterFlagName := "filter"
-	flags.StringSliceVarP(&cliOpts.Filter, filterFlagName, "f", []string{}, "Filter volume output")
+	flags.StringArrayVarP(&cliOpts.Filter, filterFlagName, "f", []string{}, "Filter volume output")
 	_ = lsCommand.RegisterFlagCompletionFunc(filterFlagName, common.AutocompleteVolumeFilters)
 
 	formatFlagName := "format"

From 047a4bc83066b509628517439bb4e62ee5122c1c Mon Sep 17 00:00:00 2001
From: Luca Di Maio <luca.dimaio1@gmail.com>
Date: Thu, 25 May 2023 21:34:53 +0200
Subject: [PATCH 2/3] fix: volume create filters

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
---
 cmd/podman/volumes/create.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmd/podman/volumes/create.go b/cmd/podman/volumes/create.go
index f443327a15..cfc2d0bcf9 100644
--- a/cmd/podman/volumes/create.go
+++ b/cmd/podman/volumes/create.go
@@ -48,7 +48,7 @@ func init() {
 	_ = createCommand.RegisterFlagCompletionFunc(driverFlagName, completion.AutocompleteNone)
 
 	labelFlagName := "label"
-	flags.StringSliceVarP(&opts.Label, labelFlagName, "l", []string{}, "Set metadata for a volume (default [])")
+	flags.StringArrayVarP(&opts.Label, labelFlagName, "l", []string{}, "Set metadata for a volume (default [])")
 	_ = createCommand.RegisterFlagCompletionFunc(labelFlagName, completion.AutocompleteNone)
 
 	optFlagName := "opt"

From 5b2d963c44517e875d49e87adbcb0cbd7921b1e4 Mon Sep 17 00:00:00 2001
From: Luca Di Maio <luca.dimaio1@gmail.com>
Date: Thu, 25 May 2023 22:56:27 +0200
Subject: [PATCH 3/3] test/e2e: add regression testing for comma-containing
 labels

Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
---
 test/e2e/images_test.go    | 10 ++++++++++
 test/e2e/pause_test.go     | 12 +++++++++++-
 test/e2e/pod_ps_test.go    |  7 ++++++-
 test/e2e/ps_test.go        | 20 ++++++++++++++++++++
 test/e2e/restart_test.go   |  7 ++++++-
 test/e2e/rm_test.go        | 10 ++++++++++
 test/e2e/secret_test.go    |  2 +-
 test/e2e/start_test.go     | 10 ++++++++++
 test/e2e/stop_test.go      | 10 ++++++++++
 test/e2e/volume_ls_test.go | 11 +++++++++++
 10 files changed, 95 insertions(+), 4 deletions(-)

diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go
index 7b10797e15..23e15defb9 100644
--- a/test/e2e/images_test.go
+++ b/test/e2e/images_test.go
@@ -392,6 +392,16 @@ LABEL "com.example.vendor"="Example Vendor"
 		Expect(output).To(Equal("[]"))
 	})
 
+	It("podman images --filter label=with,comma", func() {
+		dockerfile := `FROM quay.io/libpod/alpine:latest
+`
+		podmanTest.BuildImageWithLabel(dockerfile, "foobar.com/before:latest", "false", "test=with,comma")
+		result := podmanTest.Podman([]string{"images", "--filter", "label=test=with,comma"})
+		result.WaitWithDefaultTimeout()
+		Expect(result).Should(Exit(0))
+		Expect(result.OutputToStringArray()).To(HaveLen(2))
+	})
+
 	It("podman images --filter readonly", func() {
 		dockerfile := `FROM quay.io/libpod/alpine:latest
 `
diff --git a/test/e2e/pause_test.go b/test/e2e/pause_test.go
index c3ec08a6c6..b02d2c1e25 100644
--- a/test/e2e/pause_test.go
+++ b/test/e2e/pause_test.go
@@ -437,7 +437,7 @@ var _ = Describe("Podman pause", func() {
 		Expect(session1).Should(Exit(0))
 		cid2 := session1.OutputToString()
 
-		session1 = podmanTest.RunTopContainer("")
+		session1 = podmanTest.RunTopContainerWithArgs("", []string{"--label", "test=with,comma"})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
 		cid3 := session1.OutputToString()
@@ -451,6 +451,16 @@ var _ = Describe("Podman pause", func() {
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(125))
 
+		session1 = podmanTest.Podman([]string{"pause", "-a", "--filter", "label=test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		Expect(session1.OutputToString()).To(BeEquivalentTo(cid3))
+
+		session1 = podmanTest.Podman([]string{"unpause", "-a", "--filter", "label=test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		Expect(session1.OutputToString()).To(BeEquivalentTo(cid3))
+
 		session1 = podmanTest.Podman([]string{"pause", "-a", "--filter", fmt.Sprintf("id=%swrongid", shortCid3)})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
diff --git a/test/e2e/pod_ps_test.go b/test/e2e/pod_ps_test.go
index be58397c6e..dea23ee55f 100644
--- a/test/e2e/pod_ps_test.go
+++ b/test/e2e/pod_ps_test.go
@@ -87,7 +87,7 @@ var _ = Describe("Podman ps", func() {
 
 	It("podman pod ps --filter until", func() {
 		name := "mypod"
-		_, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {name}})
+		_, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {name}, "--label": {"test=with,comma"}})
 		Expect(ec).To(Equal(0))
 
 		result := podmanTest.Podman([]string{"pod", "ps", "--filter", "until=50"})
@@ -99,6 +99,11 @@ var _ = Describe("Podman ps", func() {
 		result.WaitWithDefaultTimeout()
 		Expect(result).Should(Exit(0))
 		Expect(result.OutputToString()).To(ContainSubstring(name))
+
+		result = podmanTest.Podman([]string{"pod", "ps", "--filter", "label=test=with,comma"})
+		result.WaitWithDefaultTimeout()
+		Expect(result).Should(Exit(0))
+		Expect(result.OutputToString()).To(ContainSubstring(name))
 	})
 
 	It("podman pod ps filter name regexp", func() {
diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go
index 93deff75e1..a6e322fc3e 100644
--- a/test/e2e/ps_test.go
+++ b/test/e2e/ps_test.go
@@ -190,6 +190,26 @@ var _ = Describe("Podman ps", func() {
 		Expect(actual).ToNot(ContainSubstring("table"))
 	})
 
+	It("podman ps --filter label=test=with,comma", func() {
+		ctrAlpha := "first"
+		container := podmanTest.Podman([]string{"run", "-dt", "--label", "test=with,comma", "--name", ctrAlpha, ALPINE, "top"})
+		container.WaitWithDefaultTimeout()
+		Expect(container).Should(Exit(0))
+
+		ctrBravo := "second"
+		containerBravo := podmanTest.Podman([]string{"run", "-dt", "--name", ctrBravo, ALPINE, "top"})
+		containerBravo.WaitWithDefaultTimeout()
+		Expect(containerBravo).Should(Exit(0))
+
+		result := podmanTest.Podman([]string{"ps", "-a", "--format", "table {{.Names}}", "--filter", "label=test=with,comma"})
+		result.WaitWithDefaultTimeout()
+		result.WaitWithDefaultTimeout()
+		Expect(result).Should(Exit(0))
+		actual := result.OutputToString()
+		Expect(actual).To(ContainSubstring("first"))
+		Expect(actual).ToNot(ContainSubstring("table"))
+	})
+
 	It("podman ps namespace flag", func() {
 		_, ec, _ := podmanTest.RunLsContainer("")
 		Expect(ec).To(Equal(0))
diff --git a/test/e2e/restart_test.go b/test/e2e/restart_test.go
index 89bd08448a..7c31f84fb8 100644
--- a/test/e2e/restart_test.go
+++ b/test/e2e/restart_test.go
@@ -311,7 +311,7 @@ var _ = Describe("Podman restart", func() {
 		Expect(session1).Should(Exit(0))
 		cid2 := session1.OutputToString()
 
-		session1 = podmanTest.RunTopContainer("")
+		session1 = podmanTest.RunTopContainerWithArgs("", []string{"--label", "test=with,comma"})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
 		cid3 := session1.OutputToString()
@@ -331,6 +331,11 @@ var _ = Describe("Podman restart", func() {
 		Expect(session1).Should(Exit(0))
 		Expect(session1.OutputToString()).To(BeEquivalentTo(cid3))
 
+		session1 = podmanTest.Podman([]string{"restart", "-a", "--filter", "label=test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		Expect(session1.OutputToString()).To(BeEquivalentTo(cid3))
+
 		session1 = podmanTest.Podman([]string{"restart", "-f", fmt.Sprintf("id=%s", cid2)})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
diff --git a/test/e2e/rm_test.go b/test/e2e/rm_test.go
index d276ed838f..554c458714 100644
--- a/test/e2e/rm_test.go
+++ b/test/e2e/rm_test.go
@@ -292,6 +292,11 @@ var _ = Describe("Podman rm", func() {
 		cid3 := session1.OutputToString()
 		shortCid3 := cid3[0:5]
 
+		session1 = podmanTest.RunTopContainerWithArgs("test4", []string{"--label", "test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		cid4 := session1.OutputToString()
+
 		session1 = podmanTest.Podman([]string{"rm", cid1, "-f", "--filter", "status=running"})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(125))
@@ -311,5 +316,10 @@ var _ = Describe("Podman rm", func() {
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
 		Expect(session1.OutputToString()).To(BeEquivalentTo(cid2))
+
+		session1 = podmanTest.Podman([]string{"rm", "-f", "--filter", "label=test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		Expect(session1.OutputToString()).To(BeEquivalentTo(cid4))
 	})
 })
diff --git a/test/e2e/secret_test.go b/test/e2e/secret_test.go
index 6ec05d938a..f57f62780d 100644
--- a/test/e2e/secret_test.go
+++ b/test/e2e/secret_test.go
@@ -229,7 +229,7 @@ var _ = Describe("Podman secret", func() {
 		Expect(list.OutputToStringArray()).To(HaveLen(2))
 		Expect(list.OutputToStringArray()[1]).To(ContainSubstring(secrID2))
 
-		list = podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("name=%s,name=%s", secret1, secret2)})
+		list = podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("name=%s", secret1), "--filter", fmt.Sprintf("name=%s", secret2)})
 		list.WaitWithDefaultTimeout()
 		Expect(list).Should(Exit(0))
 		Expect(list.OutputToStringArray()).To(HaveLen(3))
diff --git a/test/e2e/start_test.go b/test/e2e/start_test.go
index 1f2603b5ac..90df80656e 100644
--- a/test/e2e/start_test.go
+++ b/test/e2e/start_test.go
@@ -208,6 +208,11 @@ var _ = Describe("Podman start", func() {
 		cid3 := session1.OutputToString()
 		shortCid3 := cid3[0:5]
 
+		session1 = podmanTest.Podman([]string{"container", "create", "--label", "test=with,comma", ALPINE})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		cid4 := session1.OutputToString()
+
 		session1 = podmanTest.Podman([]string{"start", cid1, "-f", "status=running"})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
@@ -223,6 +228,11 @@ var _ = Describe("Podman start", func() {
 		Expect(session1).Should(Exit(0))
 		Expect(session1.OutputToString()).To(BeEquivalentTo(cid3))
 
+		session1 = podmanTest.Podman([]string{"start", "--all", "--filter", "label=test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		Expect(session1.OutputToString()).To(BeEquivalentTo(cid4))
+
 		session1 = podmanTest.Podman([]string{"start", "-f", fmt.Sprintf("id=%s", cid2)})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go
index d1e6a8edd4..c707444072 100644
--- a/test/e2e/stop_test.go
+++ b/test/e2e/stop_test.go
@@ -382,6 +382,11 @@ var _ = Describe("Podman stop", func() {
 		cid3 := session1.OutputToString()
 		shortCid3 := cid3[0:5]
 
+		session1 = podmanTest.Podman([]string{"container", "create", "--label", "test=with,comma", ALPINE})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		cid4 := session1.OutputToString()
+
 		session1 = podmanTest.Podman([]string{"start", "--all"})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
@@ -400,6 +405,11 @@ var _ = Describe("Podman stop", func() {
 		Expect(session1).Should(Exit(0))
 		Expect(session1.OutputToString()).To(BeEquivalentTo(cid3))
 
+		session1 = podmanTest.Podman([]string{"stop", "-a", "--filter", "label=test=with,comma"})
+		session1.WaitWithDefaultTimeout()
+		Expect(session1).Should(Exit(0))
+		Expect(session1.OutputToString()).To(BeEquivalentTo(cid4))
+
 		session1 = podmanTest.Podman([]string{"stop", "-f", fmt.Sprintf("id=%s", cid2)})
 		session1.WaitWithDefaultTimeout()
 		Expect(session1).Should(Exit(0))
diff --git a/test/e2e/volume_ls_test.go b/test/e2e/volume_ls_test.go
index 0d6a9599fe..7601780ada 100644
--- a/test/e2e/volume_ls_test.go
+++ b/test/e2e/volume_ls_test.go
@@ -26,6 +26,17 @@ var _ = Describe("Podman volume ls", func() {
 		Expect(session.OutputToStringArray()).To(HaveLen(2))
 	})
 
+	It("podman ls volume filter with comma label", func() {
+		session := podmanTest.Podman([]string{"volume", "create", "--label", "test=with,comma", "myvol3"})
+		session.WaitWithDefaultTimeout()
+		Expect(session).Should(Exit(0))
+
+		session = podmanTest.Podman([]string{"volume", "ls", "--filter", "label=test=with,comma"})
+		session.WaitWithDefaultTimeout()
+		Expect(session).Should(Exit(0))
+		Expect(session.OutputToStringArray()).To(HaveLen(2))
+	})
+
 	It("podman ls volume filter with a key pattern", func() {
 		session := podmanTest.Podman([]string{"volume", "create", "--label", "helloworld=world", "myvol2"})
 		session.WaitWithDefaultTimeout()