From a2693d0249e19e3312475d035060382c7e2c2c4c Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Fri, 7 Aug 2020 10:47:25 -0700 Subject: [PATCH] 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