]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
markup/goldmark: Fix panic on empty Markdown header
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 18 Feb 2025 08:30:47 +0000 (09:30 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 18 Feb 2025 10:12:39 +0000 (11:12 +0100)
Fixes #13416

markup/goldmark/render_hooks.go
markup/goldmark/toc_integration_test.go

index 12cf00455287ae95756d16551a8541be9c23f637..1e91f7ab131b5b72156a6504fdc881b0ae196282 100644 (file)
@@ -499,10 +499,10 @@ func (r *hookedRenderer) renderHeading(w util.BufWriter, source []byte, node ast
 
        text := ctx.PopRenderedString()
 
-       // All ast.Heading nodes are guaranteed to have an attribute called "id"
-       // that is an array of bytes that encode a valid string.
-       anchori, _ := n.AttributeString("id")
-       anchor := anchori.([]byte)
+       var anchor []byte
+       if anchori, ok := n.AttributeString("id"); ok {
+               anchor, _ = anchori.([]byte)
+       }
 
        page, pageInner := render.GetPageAndPageInner(ctx)
 
index 7ce2e86643f33e5b95ba90032f61a344ca4cf34b..814ae199b3426d18be7be290075b114d3a05a228 100644 (file)
@@ -258,7 +258,29 @@ title: p7 (emoji)
 `)
 
        // emoji
+
        b.AssertFileContent("public/p7/index.html", `
 <li><a href="#a-snake-emoji">A &#x1f40d; emoji</a></li>
 `)
 }
+
+func TestIssue13416(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+disableKinds = ['page','rss','section','sitemap','taxonomy','term']
+-- layouts/index.html --
+Content:{{ .Content }}|
+-- layouts/_default/_markup/render-heading.html --
+-- content/_index.md --
+---
+title: home
+---
+#
+`
+
+       b := hugolib.Test(t, files)
+
+       b.AssertFileExists("public/index.html", true)
+}