1
0
mirror of https://github.com/getsops/sops.git synced 2026-02-05 12:45:21 +01:00

Handle return values of dec.Token() to improve error messages.

Signed-off-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Felix Fontein
2023-09-28 22:15:30 +02:00
parent aa61d03acc
commit 72f11997d4
2 changed files with 26 additions and 1 deletions

View File

@@ -221,7 +221,17 @@ func (store Store) jsonFromTreeBranch(branch sops.TreeBranch) ([]byte, error) {
func (store Store) treeBranchFromJSON(in []byte) (sops.TreeBranch, error) {
dec := json.NewDecoder(bytes.NewReader(in))
dec.Token()
value, err := dec.Token()
if err != nil {
return nil, err
}
if delim, ok := value.(json.Delim); ok {
if delim.String() != "{" {
return nil, fmt.Errorf("Expected JSON object start, got delimiter %s instead", value)
}
} else {
return nil, fmt.Errorf("Expected JSON object start, got %#v of type %T instead", value, value)
}
return store.treeBranchFromJSONDecoder(dec)
}

View File

@@ -130,6 +130,21 @@ func TestDecodeNumber(t *testing.T) {
in := `42`
_, err := Store{}.treeBranchFromJSON([]byte(in))
assert.NotNil(t, err)
assert.Equal(t, "Expected JSON object start, got 42 of type float64 instead", err.Error())
}
func TestDecodeArray(t *testing.T) {
in := ` [42] `
_, err := Store{}.treeBranchFromJSON([]byte(in))
assert.NotNil(t, err)
assert.Equal(t, "Expected JSON object start, got delimiter [ instead", err.Error())
}
func TestDecodeEmpty(t *testing.T) {
in := ``
_, err := Store{}.treeBranchFromJSON([]byte(in))
assert.NotNil(t, err)
assert.Equal(t, "EOF", err.Error())
}
func TestDecodeNestedJSONObject(t *testing.T) {