summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hugolib/shortcode.go3
-rw-r--r--hugolib/shortcode_test.go17
2 files changed, 13 insertions, 7 deletions
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go
index 8ea09feda..2de00fa90 100644
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -66,6 +66,9 @@ func (scp *ShortcodeWithPage) Scratch() *Scratch {
// Get is a convenience method to look up shortcode parameters by its key.
func (scp *ShortcodeWithPage) Get(key interface{}) interface{} {
+ if scp.Params == nil {
+ return nil
+ }
if reflect.ValueOf(scp.Params).Len() == 0 {
return nil
}
diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go
index b30b5b511..cd2d9f7a5 100644
--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -124,13 +124,6 @@ func TestPositionalParamIndexOutOfBounds(t *testing.T) {
CheckShortCodeMatch(t, "{{< video 47238zzb >}}", "Playing Video error: index out of range for positional param at position 1", tem)
}
-// Issue #2294
-func TestPositionalParamNil(t *testing.T) {
- tem := tpl.New()
- tem.AddInternalShortcode("div.html", `<div data='{{ .Get 0 }}'>{{ .Inner }}</div>`)
- CheckShortCodeMatch(t, "{{% div %}}**foo**{{% /div %}}", "<div data=''><strong>foo</strong></div>", tem)
-}
-
// some repro issues for panics in Go Fuzz testing
func TestShortcodeGoFuzzRepros(t *testing.T) {
tt := tpl.New()
@@ -151,6 +144,16 @@ func TestNamedParamSC(t *testing.T) {
CheckShortCodeMatch(t, `{{< img src = "one" class = "aspen grove" >}}`, `<img src="one" class="aspen grove">`, tem)
}
+// Issue #2294
+func TestNestedNamedMissingParam(t *testing.T) {
+ tem := tpl.New()
+ tem.AddInternalShortcode("acc.html", `<div class="acc">{{ .Inner }}</div>`)
+ tem.AddInternalShortcode("div.html", `<div {{with .Get "class"}} class="{{ . }}"{{ end }}>{{ .Inner }}</div>`)
+ CheckShortCodeMatch(t,
+ `{{% acc %}}{{% div %}}{{% /div %}}{{% /acc %}}`,
+ "<div class=\"acc\"><div ></div>\n</div>", tem)
+}
+
func TestIsNamedParamsSC(t *testing.T) {
tem := tpl.New()
tem.AddInternalShortcode("byposition.html", `<div id="{{ .Get 0 }}">`)