diff options
author | Bjørn Erik Pedersen <[email protected]> | 2020-06-14 18:16:45 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2020-06-14 20:19:08 +0200 |
commit | d6ed17c60fd13c933347110c720afa09e04df1c8 (patch) | |
tree | 799961743618190d082dc705fd032fa43429d5b9 | |
parent | 145b3fcce35fbac25c7033c91c1b7ae6d1179da8 (diff) | |
download | hugo-d6ed17c60fd13c933347110c720afa09e04df1c8.tar.gz hugo-d6ed17c60fd13c933347110c720afa09e04df1c8.zip |
Fix crash for closing shortcode with no .Inner set
Fixes #6857
Closes #7330
-rw-r--r-- | hugolib/shortcode.go | 23 | ||||
-rw-r--r-- | hugolib/shortcode_test.go | 20 |
2 files changed, 35 insertions, 8 deletions
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go index 0d3bfff18..f5413a932 100644 --- a/hugolib/shortcode.go +++ b/hugolib/shortcode.go @@ -496,19 +496,26 @@ Loop: case currItem.IsRightShortcodeDelim(): // we trust the template on this: // if there's no inner, we're done - if !sc.isInline && !sc.info.ParseInfo().IsInner { - return sc, nil + if !sc.isInline { + if sc.info == nil { + // This should not happen. + return sc, fail(errors.New("BUG: template info not set"), currItem) + } + if !sc.info.ParseInfo().IsInner { + return sc, nil + } } case currItem.IsShortcodeClose(): next := pt.Peek() - if !sc.isInline && !sc.info.ParseInfo().IsInner { - if next.IsError() { - // return that error, more specific - continue + if !sc.isInline { + if sc.info == nil || !sc.info.ParseInfo().IsInner { + if next.IsError() { + // return that error, more specific + continue + } + return sc, fail(_errors.Errorf("shortcode %q has no .Inner, yet a closing tag was provided", next.Val), next) } - - return sc, fail(_errors.Errorf("shortcode %q has no .Inner, yet a closing tag was provided", next.Val), next) } if next.IsRightShortcodeDelim() { // self-closing diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go index d60bdd48b..8bb468465 100644 --- a/hugolib/shortcode_test.go +++ b/hugolib/shortcode_test.go @@ -1316,3 +1316,23 @@ title: "Hugo Rocks!" } } + +// https://github.com/gohugoio/hugo/issues/6857 +func TestShortcodeNoInner(t *testing.T) { + t.Parallel() + + b := newTestSitesBuilder(t) + + b.WithContent("page.md", `--- +title: "No Inner!" +--- +{{< noinner >}}{{< /noinner >}} + + +`).WithTemplatesAdded( + "layouts/shortcodes/noinner.html", `No inner here.`) + + err := b.BuildE(BuildCfg{}) + b.Assert(err.Error(), qt.Contains, `failed to extract shortcode: shortcode "noinner" has no .Inner, yet a closing tag was provided`) + +} |