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 {
attributes = append(attributes, node)
return ast.WalkSkipChildren, nil
} else {
- // remove attributes node
- node.Parent().RemoveChild(node.Parent(), node)
+ solitaryAttributeNodes = append(solitaryAttributeNodes, node)
}
}
// 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) {
"|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>`,
+ )
+}