Check for nil Params in shortcode's Get

Fixes #2294
This commit is contained in:
Bjørn Erik Pedersen 2016-07-21 17:18:55 +02:00
parent 0bdc0d62d4
commit 593a546fc6
2 changed files with 13 additions and 7 deletions

View File

@ -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
}

View File

@ -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 }}">`)