Skip to content

Commit

Permalink
Fix nilpointer regression with empty blockquotes
Browse files Browse the repository at this point in the history
Fixes #12756
  • Loading branch information
bep committed Aug 13, 2024
1 parent caa90e6 commit bef9214
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 14 deletions.
30 changes: 16 additions & 14 deletions markup/goldmark/blockquotes/blockquotes.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,6 @@ func (r *htmlRenderer) renderBlockquote(w util.BufWriter, src []byte, node ast.N
text := ctx.Buffer.Bytes()[pos:]
ctx.Buffer.Truncate(pos)

// Extract a source sample to use for position information.
nn := n.FirstChild()
var start, stop int
for i := 0; i < nn.Lines().Len() && i < 2; i++ {
line := nn.Lines().At(i)
if i == 0 {
start = line.Start
}
stop = line.Stop
}

// We do not mutate the source, so this is safe.
sourceRef := src[start:stop]

ordinal := ctx.GetAndIncrementOrdinal(ast.KindBlockquote)

texts := string(text)
Expand All @@ -110,6 +96,22 @@ func (r *htmlRenderer) renderBlockquote(w util.BufWriter, src []byte, node ast.N
texts = "<p>" + texts[strings.Index(texts, "\n")+1:]
}

var sourceRef []byte

// Extract a source sample to use for position information.
if nn := n.FirstChild(); nn != nil {
var start, stop int
for i := 0; i < nn.Lines().Len() && i < 2; i++ {
line := nn.Lines().At(i)
if i == 0 {
start = line.Start
}
stop = line.Stop
}
// We do not mutate the source, so this is safe.
sourceRef = src[start:stop]
}

bqctx := &blockquoteContext{
page: ctx.DocumentContext().Document,
pageInner: r.getPageInner(ctx),
Expand Down
20 changes: 20 additions & 0 deletions markup/goldmark/blockquotes/blockquotes_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,23 @@ title: "p1"
"Blockquote Alert Page: |<p>This is a tip with attributes.</p>\n|p1|p1|",
)
}

func TestBlockquoteEmptyIssue12756(t *testing.T) {
t.Parallel()

files := `
-- hugo.toml --
-- content/p1.md --
---
title: "p1"
---
>
-- layouts/_default/single.html --
Content: {{ .Content }}
`

b := hugolib.Test(t, files)
b.AssertFileContent("public/p1/index.html", "Content: <blockquote>\n</blockquote>\n")
}

0 comments on commit bef9214

Please sign in to comment.