Fix panic with markdownify/RenderString with shortcode on Page with no content file

Fixes #9959
This commit is contained in:
Bjørn Erik Pedersen 2022-06-01 10:19:05 +02:00
parent 4daac654d9
commit 212d9e3017
6 changed files with 35 additions and 6 deletions

View file

@ -163,8 +163,6 @@ func (m *pageMap) newPageFromContentNode(n *contentNode, parentBucket *pagesMapB
}, },
} }
ps.shortcodeState = newShortcodeHandler(ps, ps.s)
if err := ps.mapContent(parentBucket, metaProvider); err != nil { if err := ps.mapContent(parentBucket, metaProvider); err != nil {
return nil, ps.wrapError(err) return nil, ps.wrapError(err)
} }

View file

@ -102,6 +102,9 @@ type pageCommon struct {
// The parsed page content. // The parsed page content.
pageContent pageContent
// Keeps track of the shortcodes on a page.
shortcodeState *shortcodeHandler
// Set if feature enabled and this is in a Git repo. // Set if feature enabled and this is in a Git repo.
gitInfo *gitmap.GitInfo gitInfo *gitmap.GitInfo
codeowners []string codeowners []string

View file

@ -33,8 +33,6 @@ type pageContent struct {
cmap *pageContentMap cmap *pageContentMap
shortcodeState *shortcodeHandler
source rawPageContent source rawPageContent
} }

View file

@ -66,6 +66,8 @@ func newPageBase(metaProvider *pageMeta) (*pageState, error) {
}, },
} }
ps.shortcodeState = newShortcodeHandler(ps, ps.s)
siteAdapter := pageSiteAdapter{s: s, p: ps} siteAdapter := pageSiteAdapter{s: s, p: ps}
ps.pageMenus = &pageMenus{p: ps} ps.pageMenus = &pageMenus{p: ps}

View file

@ -25,7 +25,6 @@ import (
"errors" "errors"
"github.com/gohugoio/hugo/common/herrors"
"github.com/gohugoio/hugo/common/text" "github.com/gohugoio/hugo/common/text"
"github.com/gohugoio/hugo/common/types/hstring" "github.com/gohugoio/hugo/common/types/hstring"
"github.com/gohugoio/hugo/identity" "github.com/gohugoio/hugo/identity"
@ -334,7 +333,6 @@ func (p *pageContentOutput) WordCount() int {
} }
func (p *pageContentOutput) RenderString(args ...any) (template.HTML, error) { func (p *pageContentOutput) RenderString(args ...any) (template.HTML, error) {
defer herrors.Recover()
if len(args) < 1 || len(args) > 2 { if len(args) < 1 || len(args) > 2 {
return "", errors.New("want 1 or 2 arguments") return "", errors.New("want 1 or 2 arguments")
} }

View file

@ -158,5 +158,35 @@ Page Type: *hugolib.pageForShortcode`,
) )
}) })
}
// Issue 9959
func TestRenderStringWithShortcodeInPageWithNoContentFile(t *testing.T) {
t.Parallel()
files := `
-- config.toml --
-- layouts/shortcodes/myshort.html --
Page Kind: {{ .Page.Kind }}
-- layouts/index.html --
Short: {{ .RenderString "{{< myshort >}}" }}
Has myshort: {{ .HasShortcode "myshort" }}
Has other: {{ .HasShortcode "other" }}
`
b := NewIntegrationTestBuilder(
IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()
b.AssertFileContent("public/index.html",
`
Page Kind: home
Has myshort: true
Has other: false
`)
} }