hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit d7b54a4c37c39fce60c25a745bae1d5987b2b966
parent 13ceef7599fe84ec210adc98b90884ae3ab2881f
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Mon, 25 Apr 2022 10:05:55 +0200

markup/goldmark: Fix attribute nilpointer

Fixes 9819

Diffstat:
Mmarkup/goldmark/codeblocks/integration_test.go | 48++++++++++++++++++++++++++++++++++++++++++++++++
Mmarkup/goldmark/convert.go | 18------------------
Mmarkup/goldmark/internal/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
@@ -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
@@ -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
@@ -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
 			}