mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-28 06:30:33 +03:00
shortcodeparser: fix panic on slash following opening shortcode comment
Fixes #1093
This commit is contained in:
parent
be7b830f33
commit
be9df84772
4 changed files with 38 additions and 5 deletions
|
@ -752,7 +752,7 @@ func (p *Page) ProcessShortcodes(t tpl.Template) {
|
||||||
|
|
||||||
// these short codes aren't used until after Page render,
|
// these short codes aren't used until after Page render,
|
||||||
// but processed here to avoid coupling
|
// but processed here to avoid coupling
|
||||||
tmpContent, tmpContentShortCodes := extractAndRenderShortcodes(string(p.rawContent), p, t)
|
tmpContent, tmpContentShortCodes, _ := extractAndRenderShortcodes(string(p.rawContent), p, t)
|
||||||
p.rawContent = []byte(tmpContent)
|
p.rawContent = []byte(tmpContent)
|
||||||
p.contentShortCodes = tmpContentShortCodes
|
p.contentShortCodes = tmpContentShortCodes
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,11 @@ func (sc shortcode) String() string {
|
||||||
// HandleShortcodes does all in one go: extract, render and replace
|
// HandleShortcodes does all in one go: extract, render and replace
|
||||||
// only used for testing
|
// only used for testing
|
||||||
func HandleShortcodes(stringToParse string, page *Page, t tpl.Template) (string, error) {
|
func HandleShortcodes(stringToParse string, page *Page, t tpl.Template) (string, error) {
|
||||||
tmpContent, tmpShortcodes := extractAndRenderShortcodes(stringToParse, page, t)
|
tmpContent, tmpShortcodes, err := extractAndRenderShortcodes(stringToParse, page, t)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
if len(tmpShortcodes) > 0 {
|
if len(tmpShortcodes) > 0 {
|
||||||
tmpContentWithTokensReplaced, err := replaceShortcodeTokens([]byte(tmpContent), shortcodePlaceholderPrefix, true, tmpShortcodes)
|
tmpContentWithTokensReplaced, err := replaceShortcodeTokens([]byte(tmpContent), shortcodePlaceholderPrefix, true, tmpShortcodes)
|
||||||
|
@ -236,7 +240,7 @@ func renderShortcode(sc shortcode, p *Page, t tpl.Template) string {
|
||||||
return renderShortcodeWithPage(tmpl, data)
|
return renderShortcodeWithPage(tmpl, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func extractAndRenderShortcodes(stringToParse string, p *Page, t tpl.Template) (string, map[string]string) {
|
func extractAndRenderShortcodes(stringToParse string, p *Page, t tpl.Template) (string, map[string]string, error) {
|
||||||
|
|
||||||
content, shortcodes, err := extractShortcodes(stringToParse, p, t)
|
content, shortcodes, err := extractShortcodes(stringToParse, p, t)
|
||||||
renderedShortcodes := make(map[string]string)
|
renderedShortcodes := make(map[string]string)
|
||||||
|
@ -255,7 +259,7 @@ func extractAndRenderShortcodes(stringToParse string, p *Page, t tpl.Template) (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return content, renderedShortcodes
|
return content, renderedShortcodes, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,35 @@ func CheckShortCodeMatch(t *testing.T, input, expected string, template tpl.Temp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestShortcodeGoFuzzReports(t *testing.T) {
|
||||||
|
tem := tpl.New()
|
||||||
|
|
||||||
|
tem.AddInternalShortcode("sc.html", `foo`)
|
||||||
|
p, _ := pageFromString(SIMPLE_PAGE, "simple.md")
|
||||||
|
|
||||||
|
for i, this := range []struct {
|
||||||
|
data string
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"{{</*/", true},
|
||||||
|
} {
|
||||||
|
output, err := HandleShortcodes(this.data, p, tem)
|
||||||
|
|
||||||
|
if this.expectErr && err == nil {
|
||||||
|
t.Errorf("[%d] should have errored", i)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !this.expectErr && err != nil {
|
||||||
|
t.Errorf("[%d] should not have errored: %s", i, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !this.expectErr && err == nil && len(output) == 0 {
|
||||||
|
t.Errorf("[%d] empty result", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestNonSC(t *testing.T) {
|
func TestNonSC(t *testing.T) {
|
||||||
tem := tpl.New()
|
tem := tpl.New()
|
||||||
// notice the syntax diff from 0.12, now comment delims must be added
|
// notice the syntax diff from 0.12, now comment delims must be added
|
||||||
|
|
|
@ -325,7 +325,7 @@ func lexShortcodeLeftDelim(l *pagelexer) stateFunc {
|
||||||
|
|
||||||
func lexShortcodeComment(l *pagelexer) stateFunc {
|
func lexShortcodeComment(l *pagelexer) stateFunc {
|
||||||
posRightComment := strings.Index(l.input[l.pos:], rightComment)
|
posRightComment := strings.Index(l.input[l.pos:], rightComment)
|
||||||
if posRightComment < 0 {
|
if posRightComment <= 1 {
|
||||||
return l.errorf("comment must be closed")
|
return l.errorf("comment must be closed")
|
||||||
}
|
}
|
||||||
// we emit all as text, except the comment markers
|
// we emit all as text, except the comment markers
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue