diff --git a/pkg/utils/yaml_utils/yaml_utils.go b/pkg/utils/yaml_utils/yaml_utils.go index 5957d8d7c..9e2af864f 100644 --- a/pkg/utils/yaml_utils/yaml_utils.go +++ b/pkg/utils/yaml_utils/yaml_utils.go @@ -52,6 +52,10 @@ func updateYamlNode(node *yaml.Node, path []string, value string) error { return nil } + if node.Kind != yaml.MappingNode { + return errors.New("yaml node in path is not a dictionary") + } + key := path[0] for i := 0; i < len(node.Content)-1; i += 2 { if node.Content[i].Value == key { diff --git a/pkg/utils/yaml_utils/yaml_utils_test.go b/pkg/utils/yaml_utils/yaml_utils_test.go index 4e7aaded3..5808cfd38 100644 --- a/pkg/utils/yaml_utils/yaml_utils_test.go +++ b/pkg/utils/yaml_utils/yaml_utils_test.go @@ -74,6 +74,14 @@ func TestUpdateYamlValue(t *testing.T) { expectedOut: "foo: [1, 2, 3]\n", expectedErr: "yaml node is not a scalar", }, + { + name: "not all path elements are dictionaries", + in: "foo:\n bar: [1, 2, 3]\n", + path: []string{"foo", "bar", "baz"}, + value: "qux", + expectedOut: "foo:\n bar: [1, 2, 3]\n", + expectedErr: "yaml node in path is not a dictionary", + }, } for _, test := range tests {