diff --git a/staging/src/k8s.io/apimachinery/pkg/labels/selector.go b/staging/src/k8s.io/apimachinery/pkg/labels/selector.go index 067bcac0a0d..e83cdae0e1e 100644 --- a/staging/src/k8s.io/apimachinery/pkg/labels/selector.go +++ b/staging/src/k8s.io/apimachinery/pkg/labels/selector.go @@ -848,7 +848,6 @@ func (p *Parser) parseIdentifiersList() (sets.String, error) { return s, nil } if tok2 == CommaToken { - p.consume(Values) s.Insert("") // to handle ,, Double "" removed by StringSet } default: // it can be operator diff --git a/staging/src/k8s.io/apimachinery/pkg/labels/selector_test.go b/staging/src/k8s.io/apimachinery/pkg/labels/selector_test.go index 91dfd51d56c..abe066154d1 100644 --- a/staging/src/k8s.io/apimachinery/pkg/labels/selector_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/labels/selector_test.go @@ -636,9 +636,24 @@ func TestSetSelectorParser(t *testing.T) { {"x in (abc,)", internalSelector{ getRequirement("x", selection.In, sets.NewString("abc", ""), t), }, true, true}, + {"x in (abc,abc)", internalSelector{ + getRequirement("x", selection.In, sets.NewString("abc"), t), + }, true, true}, {"x in ()", internalSelector{ getRequirement("x", selection.In, sets.NewString(""), t), }, true, true}, + {"x in (a,,)", internalSelector{ + getRequirement("x", selection.In, sets.NewString("a", ""), t), + }, true, true}, + {"x in (a,,,)", internalSelector{ + getRequirement("x", selection.In, sets.NewString("a", ""), t), + }, true, true}, + {"x in (a,,,,,,)", internalSelector{ + getRequirement("x", selection.In, sets.NewString("a", ""), t), + }, true, true}, + {"x in (a,,a,,a,,a,,)", internalSelector{ + getRequirement("x", selection.In, sets.NewString("a", ""), t), + }, true, true}, {"x notin (abc,,def),bar,z in (),w", internalSelector{ getRequirement("bar", selection.Exists, nil, t), getRequirement("w", selection.Exists, nil, t),