diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-08-13 10:58:59 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-08-13 11:46:25 +0200 |
commit | bef9214e11d669b72dc608b496e5c74573e62a2b (patch) | |
tree | fccd451220517a496619b1408379586ee2962759 | |
parent | caa90e6a12061893c01bea77030f1e90970cc25c (diff) | |
download | hugo-bef9214e11d669b72dc608b496e5c74573e62a2b.tar.gz hugo-bef9214e11d669b72dc608b496e5c74573e62a2b.zip |
Fix nilpointer regression with empty blockquotes
Fixes #12756
-rw-r--r-- | markup/goldmark/blockquotes/blockquotes.go | 30 | ||||
-rw-r--r-- | markup/goldmark/blockquotes/blockquotes_integration_test.go | 20 |
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") +} |