diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-07-21 17:18:55 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-07-21 17:22:31 +0200 |
commit | 593a546fc6b00d4a34eba3b3f5172fed2c100507 (patch) | |
tree | 09634b3b679a41fa8941adc4b2becba19c3d5456 | |
parent | 0bdc0d62d4f5d117032e4c09f2438e9df4a9c18b (diff) |
Check for nil Params in shortcode's Get
Fixes #2294
-rw-r--r-- | hugolib/shortcode.go | 3 | ||||
-rw-r--r-- | hugolib/shortcode_test.go | 17 |
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 }}">`) |