diff --git a/stores/yaml/store.go b/stores/yaml/store.go index b500f29fa1..a3ae2fb468 100644 --- a/stores/yaml/store.go +++ b/stores/yaml/store.go @@ -124,6 +124,10 @@ func (store Store) appendYamlNodeToTreeBranch(node *yaml.Node, branch sops.TreeB branch = store.appendCommentToMap(key.FootComment, branch) } case yaml.ScalarNode: + // A empty document with a document start marker without comments results in null + if node.ShortTag() == "!!null" { + return branch, nil + } return nil, fmt.Errorf("YAML documents that are values are not supported") case yaml.AliasNode: branch, err = store.appendYamlNodeToTreeBranch(node.Alias, branch, false) diff --git a/stores/yaml/store_test.go b/stores/yaml/store_test.go index 9105888cb2..5e1af0e3e8 100644 --- a/stores/yaml/store_test.go +++ b/stores/yaml/store_test.go @@ -139,6 +139,27 @@ func TestComment4(t *testing.T) { assert.Equal(t, COMMENT_4, bytes) } +func TestEmpty(t *testing.T) { + // First iteration: load and store + branches, err := (&Store{}).LoadPlainFile([]byte(``)) + assert.Nil(t, err) + assert.Equal(t, len(branches), 0) + bytes, err := (&Store{}).EmitPlainFile(branches) + assert.Nil(t, err) + assert.Equal(t, ``, string(bytes)) +} + +func TestEmpty2(t *testing.T) { + // First iteration: load and store + branches, err := (&Store{}).LoadPlainFile([]byte(`---`)) + assert.Nil(t, err) + assert.Equal(t, len(branches), 1) + assert.Equal(t, len(branches[0]), 0) + bytes, err := (&Store{}).EmitPlainFile(branches) + assert.Nil(t, err) + assert.Equal(t, ``, string(bytes)) +} + func TestEmitValue(t *testing.T) { // First iteration: load and store bytes, err := (&Store{}).EmitValue(BRANCHES[0])