mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
tpl: Fix reflection bug in merge
Value.Type().Key() must only be called on map values. Fixes #7899
This commit is contained in:
parent
56a343507c
commit
6d95dc9d74
2 changed files with 13 additions and 0 deletions
|
@ -106,6 +106,10 @@ func mergeMap(dst, src reflect.Value) reflect.Value {
|
||||||
dve := dv.Elem()
|
dve := dv.Elem()
|
||||||
if dve.Kind() == reflect.Map {
|
if dve.Kind() == reflect.Map {
|
||||||
sve := sv.Elem()
|
sve := sv.Elem()
|
||||||
|
if sve.Kind() != reflect.Map {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if dve.Type().Key() == sve.Type().Key() {
|
if dve.Type().Key() == sve.Type().Key() {
|
||||||
out.SetMapIndex(key, mergeMap(dve, sve))
|
out.SetMapIndex(key, mergeMap(dve, sve))
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,15 @@ func TestMerge(t *testing.T) {
|
||||||
},
|
},
|
||||||
maps.Params{"a": 1, "b": maps.Params{"d": 1, "e": 2, "f": 3}, "c": 3}, false,
|
maps.Params{"a": 1, "b": maps.Params{"d": 1, "e": 2, "f": 3}, "c": 3}, false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// https://github.com/gohugoio/hugo/issues/7899
|
||||||
|
"matching keys with non-map src value",
|
||||||
|
[]interface{}{
|
||||||
|
map[string]interface{}{"k": "v"},
|
||||||
|
map[string]interface{}{"k": map[string]interface{}{"k2": "v2"}},
|
||||||
|
},
|
||||||
|
map[string]interface{}{"k": map[string]interface{}{"k2": "v2"}}, false,
|
||||||
|
},
|
||||||
{"src nil", []interface{}{nil, simpleMap}, simpleMap, false},
|
{"src nil", []interface{}{nil, simpleMap}, simpleMap, false},
|
||||||
// Error cases.
|
// Error cases.
|
||||||
{"dst not a map", []interface{}{nil, "not a map"}, nil, true},
|
{"dst not a map", []interface{}{nil, "not a map"}, nil, true},
|
||||||
|
|
Loading…
Reference in a new issue