shithub: hugo

Download patch

ref: d6ed17c60fd13c933347110c720afa09e04df1c8
parent: 145b3fcce35fbac25c7033c91c1b7ae6d1179da8
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Sun Jun 14 14:16:45 EDT 2020

Fix crash for closing shortcode with no .Inner set

Fixes #6857
Closes #7330

--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -496,19 +496,26 @@
 		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
--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -1316,3 +1316,23 @@
 	}
 
 }
+
+// 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`)
+
+}