From 3265a66cd3d42696ffb28e47ee2eb27add8e871e Mon Sep 17 00:00:00 2001 From: AJ Bahnken Date: Fri, 1 Jun 2018 12:47:27 -0700 Subject: [PATCH] Handle escaping in original json (#357) * Handle escaping in original json * Replace conditional magic with proper json encoding call for key * swap TestDecodeJSONWithEscaping with new TestEncodeJSONWithEscaping * fix copy/paste typo --- stores/json/store.go | 6 +++++- stores/json/store_test.go | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/stores/json/store.go b/stores/json/store.go index 8e3c49f74..879bdf1b3 100644 --- a/stores/json/store.go +++ b/stores/json/store.go @@ -168,7 +168,11 @@ func (store Store) encodeTree(tree sops.TreeBranch) ([]byte, error) { if err != nil { return nil, fmt.Errorf("Error encoding value %s: %s", v, err) } - out += `"` + item.Key.(string) + `": ` + string(v) + k, err := json.Marshal(item.Key.(string)) + if err != nil { + return nil, fmt.Errorf("Error encoding key %s: %s", k, err) + } + out += string(k) + `: ` + string(v) if i != len(tree)-1 { out += "," } diff --git a/stores/json/store_test.go b/stores/json/store_test.go index 0f6554762..cc6ee90c3 100644 --- a/stores/json/store_test.go +++ b/stores/json/store_test.go @@ -219,6 +219,27 @@ func TestEncodeSimpleJSON(t *testing.T) { assert.Equal(t, expected, branch) } +func TestEncodeJSONWithEscaping(t *testing.T) { + branch := sops.TreeBranch{ + sops.TreeItem{ + Key: "foo\\bar", + Value: "value", + }, + sops.TreeItem{ + Key: "a_key_with\"quotes\"", + Value: 4.0, + }, + sops.TreeItem{ + Key: "baz\\\\foo", + Value: 2.0, + }, + } + out, err := Store{}.jsonFromTreeBranch(branch) + assert.Nil(t, err) + expected, _ := Store{}.treeBranchFromJSON(out) + assert.Equal(t, expected, branch) +} + func TestEncodeJSONArrayOfObjects(t *testing.T) { branch := sops.TreeBranch{ sops.TreeItem{