Skip to content

Commit 6d95dc9

Browse files
moorereasonbep
authored andcommitted
tpl: Fix reflection bug in merge
Value.Type().Key() must only be called on map values. Fixes #7899
1 parent 56a3435 commit 6d95dc9

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

tpl/collections/merge.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ func mergeMap(dst, src reflect.Value) reflect.Value {
106106
dve := dv.Elem()
107107
if dve.Kind() == reflect.Map {
108108
sve := sv.Elem()
109+
if sve.Kind() != reflect.Map {
110+
continue
111+
}
112+
109113
if dve.Type().Key() == sve.Type().Key() {
110114
out.SetMapIndex(key, mergeMap(dve, sve))
111115
}

tpl/collections/merge_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@ func TestMerge(t *testing.T) {
111111
},
112112
maps.Params{"a": 1, "b": maps.Params{"d": 1, "e": 2, "f": 3}, "c": 3}, false,
113113
},
114+
{
115+
// https://github.com/gohugoio/hugo/issues/7899
116+
"matching keys with non-map src value",
117+
[]interface{}{
118+
map[string]interface{}{"k": "v"},
119+
map[string]interface{}{"k": map[string]interface{}{"k2": "v2"}},
120+
},
121+
map[string]interface{}{"k": map[string]interface{}{"k2": "v2"}}, false,
122+
},
114123
{"src nil", []interface{}{nil, simpleMap}, simpleMap, false},
115124
// Error cases.
116125
{"dst not a map", []interface{}{nil, "not a map"}, nil, true},

0 commit comments

Comments
 (0)