diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index f4935c6e9..d57dca82e 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -150,6 +150,17 @@ func TestPositionalParamIndexOutOfBounds(t *testing.T) { CheckShortCodeMatch(t, "{{< video 47238zzb >}}", "Playing Video Missing", wt) } +// #5071 +func TestShortcodeRelated(t *testing.T) { + t.Parallel() + wt := func(tem tpl.TemplateHandler) error { + tem.AddTemplate("_internal/shortcodes/a.html", `{{ len (.Site.RegularPages.Related .Page) }}`) + return nil + } + + CheckShortCodeMatch(t, "{{< a >}}", "0", wt) +} + // some repro issues for panics in Go Fuzz testing func TestNamedParamSC(t *testing.T) { diff --git a/hugolib/site_sections.go b/hugolib/site_sections.go index 2a92a3424..15b96e1a7 100644 --- a/hugolib/site_sections.go +++ b/hugolib/site_sections.go @@ -145,15 +145,16 @@ func (p *Page) Eq(other interface{}) bool { } func unwrapPage(in interface{}) (*Page, error) { - if po, ok := in.(*PageOutput); ok { - in = po.Page - } - - pp, ok := in.(*Page) - if !ok { + switch v := in.(type) { + case *Page: + return v, nil + case *PageOutput: + return v.Page, nil + case *PageWithoutContent: + return v.Page, nil + default: return nil, fmt.Errorf("%T not supported", in) } - return pp, nil } // Sections returns this section's subsections, if any.