markup/goldmark: Fix panic on stray attribute nodes
This commit is contained in:
parent
641403f7de
commit
85c1727748
2 changed files with 41 additions and 3 deletions
|
@ -117,8 +117,9 @@ func (a *transformer) isFragmentNode(n ast.Node) bool {
|
|||
|
||||
func (a *transformer) Transform(node *ast.Document, reader text.Reader, pc parser.Context) {
|
||||
var attributes []ast.Node
|
||||
var solitaryAttributeNodes []ast.Node
|
||||
if a.cfg.Attribute.Block {
|
||||
attributes = make([]ast.Node, 0, 500)
|
||||
attributes = make([]ast.Node, 0, 100)
|
||||
}
|
||||
ast.Walk(node, func(node ast.Node, entering bool) (ast.WalkStatus, error) {
|
||||
if !entering {
|
||||
|
@ -141,8 +142,7 @@ func (a *transformer) Transform(node *ast.Document, reader text.Reader, pc parse
|
|||
attributes = append(attributes, node)
|
||||
return ast.WalkSkipChildren, nil
|
||||
} else {
|
||||
// remove attributes node
|
||||
node.Parent().RemoveChild(node.Parent(), node)
|
||||
solitaryAttributeNodes = append(solitaryAttributeNodes, node)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,6 +161,11 @@ func (a *transformer) Transform(node *ast.Document, reader text.Reader, pc parse
|
|||
// remove attributes node
|
||||
attr.Parent().RemoveChild(attr.Parent(), attr)
|
||||
}
|
||||
|
||||
// Remove any solitary attribute nodes.
|
||||
for _, n := range solitaryAttributeNodes {
|
||||
n.Parent().RemoveChild(n.Parent(), n)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *transformer) generateAutoID(n ast.Node, reader text.Reader, pc parser.Context) {
|
||||
|
|
|
@ -75,3 +75,36 @@ Second line
|
|||
"|Identifiers: [a-a-a-a-a-a-c-c-c-c-c-c-c-c-d base-name base-name-1 example-hyperlink-in-a-header foo-something-bar foobar my-title my-title-1 second-line term title-with-id title-with-id]|",
|
||||
)
|
||||
}
|
||||
|
||||
func TestSolitaryAttributesCrash(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
[markup.goldmark.parser.attribute]
|
||||
block = true
|
||||
-- layouts/_default/single.html --
|
||||
Content: {{ .Content }}
|
||||
-- content/p1.md --
|
||||
---
|
||||
title: "Title"
|
||||
---
|
||||
|
||||
1. a
|
||||
|
||||
{.x}
|
||||
|
||||
1. b
|
||||
|
||||
{.x}
|
||||
|
||||
|
||||
|
||||
`
|
||||
|
||||
b := hugolib.Test(t, files)
|
||||
|
||||
b.AssertFileContent("public/p1/index.html",
|
||||
` <li>a</li>`,
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue