markup/goldmark: Fix attribute nilpointer

Fixes 9819
This commit is contained in:
Bjørn Erik Pedersen 2022-04-25 10:05:55 +02:00
parent 13ceef7599
commit d7b54a4c37
3 changed files with 49 additions and 19 deletions

View file

@ -302,3 +302,51 @@ Attributes: {{ .Attributes }}|Options: {{ .Options }}|
testLanguage("bash", "Attributes: map[]|Options: map[style:monokai]|") testLanguage("bash", "Attributes: map[]|Options: map[style:monokai]|")
testLanguage("hugo", "Attributes: map[style:monokai]|Options: map[]|") testLanguage("hugo", "Attributes: map[style:monokai]|Options: map[]|")
} }
func TestPanics(t *testing.T) {
files := `
-- config.toml --
[markup]
[markup.goldmark]
[markup.goldmark.parser]
autoHeadingID = true
autoHeadingIDType = "github"
[markup.goldmark.parser.attribute]
block = true
title = true
-- content/p1.md --
---
title: "p1"
---
BLOCK
Common
-- layouts/_default/single.html --
{{ .Content }}
`
for _, test := range []struct {
name string
markdown string
}{
{"issue-9819", "asdf\n: {#myid}"},
} {
t.Run(test.name, func(t *testing.T) {
t.Parallel()
b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: strings.ReplaceAll(files, "BLOCK", test.markdown),
},
).Build()
b.AssertFileContent("public/p1/index.html", "Common")
})
}
}

View file

@ -16,9 +16,6 @@ package goldmark
import ( import (
"bytes" "bytes"
"fmt"
"path/filepath"
"runtime/debug"
"github.com/gohugoio/hugo/markup/goldmark/codeblocks" "github.com/gohugoio/hugo/markup/goldmark/codeblocks"
"github.com/gohugoio/hugo/markup/goldmark/internal/extensions/attributes" "github.com/gohugoio/hugo/markup/goldmark/internal/extensions/attributes"
@ -26,11 +23,6 @@ import (
"github.com/gohugoio/hugo/identity" "github.com/gohugoio/hugo/identity"
"github.com/pkg/errors"
"github.com/spf13/afero"
"github.com/gohugoio/hugo/hugofs"
"github.com/gohugoio/hugo/markup/converter" "github.com/gohugoio/hugo/markup/converter"
"github.com/gohugoio/hugo/markup/tableofcontents" "github.com/gohugoio/hugo/markup/tableofcontents"
"github.com/yuin/goldmark" "github.com/yuin/goldmark"
@ -178,16 +170,6 @@ func (c converterResult) GetIdentities() identity.Identities {
var converterIdentity = identity.KeyValueIdentity{Key: "goldmark", Value: "converter"} var converterIdentity = identity.KeyValueIdentity{Key: "goldmark", Value: "converter"}
func (c *goldmarkConverter) Convert(ctx converter.RenderContext) (result converter.Result, err error) { func (c *goldmarkConverter) Convert(ctx converter.RenderContext) (result converter.Result, err error) {
defer func() {
if r := recover(); r != nil {
dir := afero.GetTempDir(hugofs.Os, "hugo_bugs")
name := fmt.Sprintf("goldmark_%s.txt", c.ctx.DocumentID)
filename := filepath.Join(dir, name)
afero.WriteFile(hugofs.Os, filename, ctx.Src, 07555)
fmt.Print(string(debug.Stack()))
err = errors.Errorf("[BUG] goldmark: %s: create an issue on GitHub attaching the file in: %s", r, filename)
}
}()
buf := &render.BufWriter{Buffer: &bytes.Buffer{}} buf := &render.BufWriter{Buffer: &bytes.Buffer{}}
result = buf result = buf

View file

@ -101,7 +101,7 @@ func (a *transformer) Transform(node *ast.Document, reader text.Reader, pc parse
// Attributes for fenced code blocks are handled in their own extension, // Attributes for fenced code blocks are handled in their own extension,
// but note that we currently only support code block attributes when // but note that we currently only support code block attributes when
// CodeFences=true. // CodeFences=true.
if node.PreviousSibling().Kind() != ast.KindFencedCodeBlock && !node.HasBlankPreviousLines() { if node.PreviousSibling() != nil && node.PreviousSibling().Kind() != ast.KindFencedCodeBlock && !node.HasBlankPreviousLines() {
attributes = append(attributes, node) attributes = append(attributes, node)
return ast.WalkSkipChildren, nil return ast.WalkSkipChildren, nil
} }