mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
0dbeac80cd
commit
7d78a498e1
2 changed files with 47 additions and 1 deletions
|
@ -224,6 +224,10 @@ func (s shortcode) insertPlaceholder() bool {
|
||||||
return !s.doMarkup || s.configVersion() == 1
|
return !s.doMarkup || s.configVersion() == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s shortcode) needsInner() bool {
|
||||||
|
return s.info != nil && s.info.ParseInfo().IsInner
|
||||||
|
}
|
||||||
|
|
||||||
func (s shortcode) configVersion() int {
|
func (s shortcode) configVersion() int {
|
||||||
if s.info == nil {
|
if s.info == nil {
|
||||||
// Not set for inline shortcodes.
|
// Not set for inline shortcodes.
|
||||||
|
@ -557,6 +561,7 @@ func (s *shortcodeHandler) extractShortcode(ordinal, level int, source []byte, p
|
||||||
cnt := 0
|
cnt := 0
|
||||||
nestedOrdinal := 0
|
nestedOrdinal := 0
|
||||||
nextLevel := level + 1
|
nextLevel := level + 1
|
||||||
|
closed := false
|
||||||
const errorPrefix = "failed to extract shortcode"
|
const errorPrefix = "failed to extract shortcode"
|
||||||
|
|
||||||
fail := func(err error, i pageparser.Item) error {
|
fail := func(err error, i pageparser.Item) error {
|
||||||
|
@ -612,9 +617,10 @@ Loop:
|
||||||
}
|
}
|
||||||
|
|
||||||
case currItem.IsShortcodeClose():
|
case currItem.IsShortcodeClose():
|
||||||
|
closed = true
|
||||||
next := pt.Peek()
|
next := pt.Peek()
|
||||||
if !sc.isInline {
|
if !sc.isInline {
|
||||||
if sc.info == nil || !sc.info.ParseInfo().IsInner {
|
if !sc.needsInner() {
|
||||||
if next.IsError() {
|
if next.IsError() {
|
||||||
// return that error, more specific
|
// return that error, more specific
|
||||||
continue
|
continue
|
||||||
|
@ -689,6 +695,11 @@ Loop:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case currItem.IsDone():
|
case currItem.IsDone():
|
||||||
|
if !currItem.IsError() {
|
||||||
|
if !closed && sc.needsInner() {
|
||||||
|
return sc, fmt.Errorf("%s: unclosed shortcode %q", errorPrefix, sc.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
// handled by caller
|
// handled by caller
|
||||||
pt.Backup()
|
pt.Backup()
|
||||||
break Loop
|
break Loop
|
||||||
|
|
|
@ -1241,3 +1241,38 @@ InnerDeindent: closing-no-newline: 0
|
||||||
|
|
||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue 10675.
|
||||||
|
func TestShortcodeErrorWhenItShouldBeClosed(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
files := `
|
||||||
|
-- config.toml --
|
||||||
|
disableKinds = ["home", "taxonomy", "term"]
|
||||||
|
-- content/p1.md --
|
||||||
|
---
|
||||||
|
title: "p1"
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< sc >}}
|
||||||
|
|
||||||
|
Text.
|
||||||
|
|
||||||
|
-- layouts/shortcodes/sc.html --
|
||||||
|
Inner: {{ .Get 0 }}: {{ len .Inner }}
|
||||||
|
-- layouts/_default/single.html --
|
||||||
|
{{ .Content }}
|
||||||
|
`
|
||||||
|
|
||||||
|
b, err := NewIntegrationTestBuilder(
|
||||||
|
IntegrationTestConfig{
|
||||||
|
T: t,
|
||||||
|
TxtarString: files,
|
||||||
|
Running: true,
|
||||||
|
Verbose: true,
|
||||||
|
},
|
||||||
|
).BuildE()
|
||||||
|
|
||||||
|
b.Assert(err, qt.Not(qt.IsNil))
|
||||||
|
b.Assert(err.Error(), qt.Contains, `p1.md:5:1": failed to extract shortcode: unclosed shortcode "sc"`)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue