diff --git a/hugolib/cascade_test.go b/hugolib/cascade_test.go index 3e3e471b7..1f9309764 100644 --- a/hugolib/cascade_test.go +++ b/hugolib/cascade_test.go @@ -965,3 +965,27 @@ All. b.AssertLogContains("! WARN") } + +func TestCascadeNilMapIssue13853(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +-- content/test/_index.md -- +--- +title: Test +cascade: +- build: + list: local + target: + path: '{/test/**}' +- params: + title: 'Test page' + target: + path: '{/test/**}' +--- +` + + // Just verify that it does not panic. + _ = Test(t, files) +} diff --git a/resources/page/page_matcher.go b/resources/page/page_matcher.go index 858def5ef..0ca41aa85 100644 --- a/resources/page/page_matcher.go +++ b/resources/page/page_matcher.go @@ -177,6 +177,9 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er if pcfg.Fields == nil { pcfg.Fields = make(maps.Params) } + if pcfg.Params == nil { + pcfg.Params = make(maps.Params) + } for k, v := range m { switch strings.ToLower(k) { case "_target", "target": @@ -186,9 +189,6 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er } pcfg.Target = target case "params": - if pcfg.Params == nil { - pcfg.Params = make(maps.Params) - } params := maps.ToStringMap(v) for k, v := range params { if _, found := pcfg.Params[k]; !found { @@ -196,7 +196,6 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er } } default: - pcfg.Fields[k] = v } } diff --git a/resources/page/page_matcher_test.go b/resources/page/page_matcher_test.go index 7f441d3ab..8b9cbccd4 100644 --- a/resources/page/page_matcher_test.go +++ b/resources/page/page_matcher_test.go @@ -89,6 +89,7 @@ func TestPageMatcher(t *testing.T) { return v } c.Assert(fn(map[string]any{"_target": map[string]any{"kind": "page"}, "foo": "bar"}), qt.DeepEquals, PageMatcherParamsConfig{ + Params: maps.Params{}, Fields: maps.Params{ "foo": "bar", },