Skip to content

Commit da05387

Browse files
authored
Merge pull request #1307 from felixfontein/json-decode
Handle return values of dec.Token() to improve error messages
2 parents aa61d03 + 72f1199 commit da05387

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

stores/json/store.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,17 @@ func (store Store) jsonFromTreeBranch(branch sops.TreeBranch) ([]byte, error) {
221221

222222
func (store Store) treeBranchFromJSON(in []byte) (sops.TreeBranch, error) {
223223
dec := json.NewDecoder(bytes.NewReader(in))
224-
dec.Token()
224+
value, err := dec.Token()
225+
if err != nil {
226+
return nil, err
227+
}
228+
if delim, ok := value.(json.Delim); ok {
229+
if delim.String() != "{" {
230+
return nil, fmt.Errorf("Expected JSON object start, got delimiter %s instead", value)
231+
}
232+
} else {
233+
return nil, fmt.Errorf("Expected JSON object start, got %#v of type %T instead", value, value)
234+
}
225235
return store.treeBranchFromJSONDecoder(dec)
226236
}
227237

stores/json/store_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,21 @@ func TestDecodeNumber(t *testing.T) {
130130
in := `42`
131131
_, err := Store{}.treeBranchFromJSON([]byte(in))
132132
assert.NotNil(t, err)
133+
assert.Equal(t, "Expected JSON object start, got 42 of type float64 instead", err.Error())
134+
}
135+
136+
func TestDecodeArray(t *testing.T) {
137+
in := ` [42] `
138+
_, err := Store{}.treeBranchFromJSON([]byte(in))
139+
assert.NotNil(t, err)
140+
assert.Equal(t, "Expected JSON object start, got delimiter [ instead", err.Error())
141+
}
142+
143+
func TestDecodeEmpty(t *testing.T) {
144+
in := ``
145+
_, err := Store{}.treeBranchFromJSON([]byte(in))
146+
assert.NotNil(t, err)
147+
assert.Equal(t, "EOF", err.Error())
133148
}
134149

135150
func TestDecodeNestedJSONObject(t *testing.T) {

0 commit comments

Comments
 (0)