commit 53a6210d82eaa2cff7c802df88ff08dac5e7dced
parent 7182809d96a1decf937074556ef9f6370b145c4f
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Tue, 8 Mar 2022 20:10:19 +0100
markup/goldmark/codeblocks: Fix slice bounds out of range
For the Position in code blocks we try to match the .Inner with the original source. This isn't always possible.
This commits avoids panics in these situations.
Fixes #9627
Diffstat:
2 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/hugolib/page.go b/hugolib/page.go
@@ -784,6 +784,11 @@ func (p *pageState) posFromPage(offset int) text.Position {
}
func (p *pageState) posFromInput(input []byte, offset int) text.Position {
+ if offset < 0 {
+ return text.Position{
+ Filename: p.pathOrTitle(),
+ }
+ }
lf := []byte("\n")
input = input[:offset]
lineNumber := bytes.Count(input, lf) + 1
diff --git a/markup/goldmark/codeblocks/integration_test.go b/markup/goldmark/codeblocks/integration_test.go
@@ -164,6 +164,43 @@ fmt.Println("Hello, World!");
)
}
+func TestCodeblocksBugs(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- config.toml --
+-- layouts/_default/_markup/render-codeblock.html --
+{{ .Position | safeHTML }}
+-- layouts/_default/single.html --
+{{ .Content }}
+-- content/p1.md --
+---
+title: "p1"
+---
+
+## Issue 9627
+
+§§§text
+{{</* foo */>}}
+§§§
+
+`
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ NeedsOsFS: false,
+ },
+ ).Build()
+
+ b.AssertFileContent("public/p1/index.html", `
+# Issue 9627: For the Position in code blocks we try to match the .Inner with the original source. This isn't always possible.
+p1.md:0:0
+ `,
+ )
+}
+
func TestCodeChomp(t *testing.T) {
t.Parallel()