aboutsummaryrefslogtreecommitdiffhomepage
path: root/markup
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-08-13 10:58:59 +0200
committerBjørn Erik Pedersen <[email protected]>2024-08-13 11:46:25 +0200
commitbef9214e11d669b72dc608b496e5c74573e62a2b (patch)
treefccd451220517a496619b1408379586ee2962759 /markup
parentcaa90e6a12061893c01bea77030f1e90970cc25c (diff)
downloadhugo-bef9214e11d669b72dc608b496e5c74573e62a2b.tar.gz
hugo-bef9214e11d669b72dc608b496e5c74573e62a2b.zip
Fix nilpointer regression with empty blockquotes
Fixes #12756
Diffstat (limited to 'markup')
-rw-r--r--markup/goldmark/blockquotes/blockquotes.go30
-rw-r--r--markup/goldmark/blockquotes/blockquotes_integration_test.go20
2 files changed, 36 insertions, 14 deletions
diff --git a/markup/goldmark/blockquotes/blockquotes.go b/markup/goldmark/blockquotes/blockquotes.go
index f4c908e0b..2f5629d87 100644
--- a/markup/goldmark/blockquotes/blockquotes.go
+++ b/markup/goldmark/blockquotes/blockquotes.go
@@ -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)
@@ -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),
diff --git a/markup/goldmark/blockquotes/blockquotes_integration_test.go b/markup/goldmark/blockquotes/blockquotes_integration_test.go
index 45c7caa0f..45c031098 100644
--- a/markup/goldmark/blockquotes/blockquotes_integration_test.go
+++ b/markup/goldmark/blockquotes/blockquotes_integration_test.go
@@ -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")
+}