From a2693d0249e19e3312475d035060382c7e2c2c4c Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Fri, 7 Aug 2020 10:47:25 -0700 Subject: [PATCH 1/3] fix panic when fieldspec refers an empty value --- api/krusty/namereference_test.go | 44 ++++++++++++++++++++++++++++++++ kyaml/yaml/fns.go | 4 +++ kyaml/yaml/fns_test.go | 13 ++++++++++ 3 files changed, 61 insertions(+) create mode 100644 api/krusty/namereference_test.go diff --git a/api/krusty/namereference_test.go b/api/krusty/namereference_test.go new file mode 100644 index 000000000..04ae263c6 --- /dev/null +++ b/api/krusty/namereference_test.go @@ -0,0 +1,44 @@ +package krusty_test + +import ( + "testing" + + kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" +) + +func TestEmptyFielsSpecValue(t *testing.T) { + th := kusttest_test.MakeHarness(t) + th.WriteK("/app", ` +generators: +- generators.yaml +configurations: +- kustomizeconfig.yaml +`) + th.WriteF("/app/generators.yaml", ` +apiVersion: builtin +kind: ConfigMapGenerator +metadata: + name: secret-example +labels: + app.kubernetes.io/name: secret-example +literals: +- this_is_a_secret_name= +`) + th.WriteF("/app/kustomizeconfig.yaml", ` +nameReference: +- kind: Secret + version: v1 + fieldSpecs: + - path: data/this_is_a_secret_name + kind: ConfigMap +`) + m := th.Run("/app", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, ` +apiVersion: v1 +data: + this_is_a_secret_name: "" +kind: ConfigMap +metadata: + name: secret-example-7hf4fh868h +`) +} diff --git a/kyaml/yaml/fns.go b/kyaml/yaml/fns.go index 9de3e26eb..917d728bf 100644 --- a/kyaml/yaml/fns.go +++ b/kyaml/yaml/fns.go @@ -467,6 +467,10 @@ func (s FieldSetter) Filter(rn *RNode) (*RNode, error) { if err := ErrorIfInvalid(rn, yaml.ScalarNode); err != nil { return rn, err } + // value is nil or null + if IsMissingOrNull(s.Value) { + return rn, nil + } // only apply the style if there is not an existing style // or we want to override it if !s.OverrideStyle || s.Value.YNode().Style == 0 { diff --git a/kyaml/yaml/fns_test.go b/kyaml/yaml/fns_test.go index e9590aa3f..0162aec0e 100644 --- a/kyaml/yaml/fns_test.go +++ b/kyaml/yaml/fns_test.go @@ -395,6 +395,19 @@ bar: buz assert.Equal(t, `baz `, assertNoErrorString(t)(k.String())) + // Empty value + node, err = Parse(` +foo +`) + assert.NoError(t, err) + instance = FieldSetter{} + k, err = instance.Filter(node) + assert.NoError(t, err) + assert.Equal(t, `foo +`, assertNoErrorString(t)(node.String())) + assert.Equal(t, `foo +`, assertNoErrorString(t)(k.String())) + // Encounter error node, err = Parse(` -a From 868a226e4ef9183c4222d5899fe21ba997c2717c Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Fri, 7 Aug 2020 11:11:08 -0700 Subject: [PATCH 2/3] fix typo --- api/krusty/namereference_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/krusty/namereference_test.go b/api/krusty/namereference_test.go index 04ae263c6..b3a715d60 100644 --- a/api/krusty/namereference_test.go +++ b/api/krusty/namereference_test.go @@ -6,7 +6,7 @@ import ( kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" ) -func TestEmptyFielsSpecValue(t *testing.T) { +func TestEmptyFieldSpecValue(t *testing.T) { th := kusttest_test.MakeHarness(t) th.WriteK("/app", ` generators: From 669ae599827b72da4b3108b70aa3908d0cc80d78 Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Fri, 7 Aug 2020 11:12:40 -0700 Subject: [PATCH 3/3] code review --- kyaml/yaml/fns.go | 1 - 1 file changed, 1 deletion(-) diff --git a/kyaml/yaml/fns.go b/kyaml/yaml/fns.go index 917d728bf..668dcafc3 100644 --- a/kyaml/yaml/fns.go +++ b/kyaml/yaml/fns.go @@ -467,7 +467,6 @@ func (s FieldSetter) Filter(rn *RNode) (*RNode, error) { if err := ErrorIfInvalid(rn, yaml.ScalarNode); err != nil { return rn, err } - // value is nil or null if IsMissingOrNull(s.Value) { return rn, nil }