diff --git a/pkg/json/merge.go b/pkg/json/merge.go index 6fb1270..55da8ef 100644 --- a/pkg/json/merge.go +++ b/pkg/json/merge.go @@ -15,14 +15,14 @@ func MergeAPIExtensionsJSON(a, b *apiextensionsv1.JSON) (*apiextensionsv1.JSON, } aMap := map[string]interface{}{} - if a != nil { + if a != nil && len(a.Raw) > 0 { if err := json.Unmarshal(a.Raw, &aMap); err != nil { return nil, fmt.Errorf("unmarshalling first JSON variable: %w", err) } } var bMap map[string]interface{} - if b != nil { + if b != nil && len(b.Raw) > 0 { if err := json.Unmarshal(b.Raw, &bMap); err != nil { return nil, fmt.Errorf("unmarshalling second JSON variable: %w", err) } diff --git a/pkg/json/merge_test.go b/pkg/json/merge_test.go index 379c23d..6e037c2 100644 --- a/pkg/json/merge_test.go +++ b/pkg/json/merge_test.go @@ -54,6 +54,38 @@ func TestMergeMaps(t *testing.T) { Raw: nil, }, }, + { + name: "handle non-nil struct with nil Raw (first arg)", + a: &apiextensionsv1.JSON{}, + b: nil, + expected: &apiextensionsv1.JSON{ + Raw: []byte(`{}`), + }, + }, + { + name: "handle non-nil struct with nil Raw (second arg)", + a: nil, + b: &apiextensionsv1.JSON{}, + expected: &apiextensionsv1.JSON{ + Raw: []byte(`{}`), + }, + }, + { + name: "handle both non-nil structs with nil Raw", + a: &apiextensionsv1.JSON{}, + b: &apiextensionsv1.JSON{}, + expected: &apiextensionsv1.JSON{ + Raw: []byte(`{}`), + }, + }, + { + name: "handle non-nil struct with empty Raw bytes", + a: &apiextensionsv1.JSON{Raw: []byte{}}, + b: &apiextensionsv1.JSON{Raw: []byte{}}, + expected: &apiextensionsv1.JSON{ + Raw: []byte(`{}`), + }, + }, } for _, tc := range stringStringCases {