From 72f11997d496e283a8d924607559ea251deede96 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Thu, 28 Sep 2023 22:15:30 +0200 Subject: [PATCH] Handle return values of dec.Token() to improve error messages. Signed-off-by: Felix Fontein --- stores/json/store.go | 12 +++++++++++- stores/json/store_test.go | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/stores/json/store.go b/stores/json/store.go index 81b8bfead..16a4b5d05 100644 --- a/stores/json/store.go +++ b/stores/json/store.go @@ -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) } diff --git a/stores/json/store_test.go b/stores/json/store_test.go index be5e30be3..311276d0d 100644 --- a/stores/json/store_test.go +++ b/stores/json/store_test.go @@ -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) {