From d7b54a4c37c39fce60c25a745bae1d5987b2b966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 25 Apr 2022 10:05:55 +0200 Subject: [PATCH] markup/goldmark: Fix attribute nilpointer Fixes 9819 --- .../goldmark/codeblocks/integration_test.go | 48 +++++++++++++++++++ markup/goldmark/convert.go | 18 ------- .../extensions/attributes/attributes.go | 2 +- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/markup/goldmark/codeblocks/integration_test.go b/markup/goldmark/codeblocks/integration_test.go index 63b841e72..199049789 100644 --- a/markup/goldmark/codeblocks/integration_test.go +++ b/markup/goldmark/codeblocks/integration_test.go @@ -302,3 +302,51 @@ Attributes: {{ .Attributes }}|Options: {{ .Options }}| testLanguage("bash", "Attributes: map[]|Options: map[style:monokai]|") 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") + }) + } + +} diff --git a/markup/goldmark/convert.go b/markup/goldmark/convert.go index 9442ee9e7..ba85831b0 100644 --- a/markup/goldmark/convert.go +++ b/markup/goldmark/convert.go @@ -16,9 +16,6 @@ package goldmark import ( "bytes" - "fmt" - "path/filepath" - "runtime/debug" "github.com/gohugoio/hugo/markup/goldmark/codeblocks" "github.com/gohugoio/hugo/markup/goldmark/internal/extensions/attributes" @@ -26,11 +23,6 @@ import ( "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/tableofcontents" "github.com/yuin/goldmark" @@ -178,16 +170,6 @@ func (c converterResult) GetIdentities() identity.Identities { var converterIdentity = identity.KeyValueIdentity{Key: "goldmark", Value: "converter"} 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{}} result = buf diff --git a/markup/goldmark/internal/extensions/attributes/attributes.go b/markup/goldmark/internal/extensions/attributes/attributes.go index 22c717b94..60ae609ec 100644 --- a/markup/goldmark/internal/extensions/attributes/attributes.go +++ b/markup/goldmark/internal/extensions/attributes/attributes.go @@ -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, // but note that we currently only support code block attributes when // 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) return ast.WalkSkipChildren, nil }