summaryrefslogtreecommitdiffstats
path: root/markup/converter
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-03-10 08:19:03 +0100
committerGitHub <noreply@github.com>2022-03-10 08:19:03 +0100
commit4e14cf7607ad3afdbf65272cd5bb61dba4b415da (patch)
tree84922c4407920e9b45502afce15730c0da796a88 /markup/converter
parent5697348e1732a5f64ee7467283eb0335f2ec36e8 (diff)
Fail with error when double-rendering text in markdownify/RenderString
This commit prevents the most commons case of infinite recursion in link render hooks when the `linkify` option is enabled (see below). This is always a user error, but getting a `stack overflow` (the current stack limit in Go is 1 GB on 64-bit, 250 MB on 32-bit) error isn't very helpful. This fix will not prevent all such errors, though, but we may do better once #9570 is in place. So, these will fail: ``` <a href="{{ .Destination | safeURL }}" >{{ .Text | markdownify }}</a> <a href="{{ .Destination | safeURL }}" >{{ .Text | .Page.RenderString }}</a> ``` `.Text` is already rendered to `HTML`. The above needs to be rewritten to: ``` <a href="{{ .Destination | safeURL }}" >{{ .Text | safeHTML }}</a> <a href="{{ .Destination | safeURL }}" >{{ .Text | safeHTML }}</a> ``` Fixes #8959
Diffstat (limited to 'markup/converter')
-rw-r--r--markup/converter/hooks/hooks.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/markup/converter/hooks/hooks.go b/markup/converter/hooks/hooks.go
index 54ebf405e..2f2d5e6cb 100644
--- a/markup/converter/hooks/hooks.go
+++ b/markup/converter/hooks/hooks.go
@@ -18,6 +18,7 @@ import (
"github.com/gohugoio/hugo/common/hugio"
"github.com/gohugoio/hugo/common/text"
+ "github.com/gohugoio/hugo/common/types/hstring"
"github.com/gohugoio/hugo/identity"
"github.com/gohugoio/hugo/markup/internal/attributes"
)
@@ -32,7 +33,7 @@ type LinkContext interface {
Page() interface{}
Destination() string
Title() string
- Text() string
+ Text() hstring.RenderedString
PlainText() string
}
@@ -75,7 +76,7 @@ type HeadingContext interface {
// Anchor is the HTML id assigned to the heading.
Anchor() string
// Text is the rendered (HTML) heading text, excluding the heading marker.
- Text() string
+ Text() hstring.RenderedString
// PlainText is the unrendered version of Text.
PlainText() string