markup/goldmark: Fix data race in the hugocontext wrapper

The window for this to happen is very small, but it has been reported by Go's race detector (-race flag) in a tests once.
This commit is contained in:
Bjørn Erik Pedersen 2024-04-22 18:12:49 +02:00
parent 2d75f539e1
commit 509ab08c1b
3 changed files with 4 additions and 4 deletions

View file

@ -175,7 +175,7 @@ func (pco *pageContentOutput) RenderShortcodes(ctx context.Context) (template.HT
// This content will be parsed and rendered by Goldmark. // This content will be parsed and rendered by Goldmark.
// Wrap it in a special Hugo markup to assign the correct Page from // Wrap it in a special Hugo markup to assign the correct Page from
// the stack. // the stack.
c = hugocontext.Wrap(c, pco.po.p.pid) return template.HTML(hugocontext.Wrap(c, pco.po.p.pid)), nil
} }
return helpers.BytesToHTML(c), nil return helpers.BytesToHTML(c), nil

View file

@ -34,7 +34,7 @@ func New() goldmark.Extender {
// Wrap wraps the given byte slice in a Hugo context that used to determine the correct Page // Wrap wraps the given byte slice in a Hugo context that used to determine the correct Page
// in .RenderShortcodes. // in .RenderShortcodes.
func Wrap(b []byte, pid uint64) []byte { func Wrap(b []byte, pid uint64) string {
buf := bufferpool.GetBuffer() buf := bufferpool.GetBuffer()
defer bufferpool.PutBuffer(buf) defer bufferpool.PutBuffer(buf)
buf.Write(prefix) buf.Write(prefix)
@ -45,7 +45,7 @@ func Wrap(b []byte, pid uint64) []byte {
buf.Write(b) buf.Write(b)
buf.Write(prefix) buf.Write(prefix)
buf.Write(closingDelimAndNewline) buf.Write(closingDelimAndNewline)
return buf.Bytes() return buf.String()
} }
var kindHugoContext = ast.NewNodeKind("HugoContext") var kindHugoContext = ast.NewNodeKind("HugoContext")

View file

@ -24,7 +24,7 @@ func TestWrap(t *testing.T) {
b := []byte("test") b := []byte("test")
c.Assert(string(Wrap(b, 42)), qt.Equals, "{{__hugo_ctx pid=42}}\ntest{{__hugo_ctx/}}\n") c.Assert(Wrap(b, 42), qt.Equals, "{{__hugo_ctx pid=42}}\ntest{{__hugo_ctx/}}\n")
} }
func BenchmarkWrap(b *testing.B) { func BenchmarkWrap(b *testing.B) {