aboutsummaryrefslogtreecommitdiffhomepage
path: root/tpl
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2022-03-10 08:19:03 +0100
committerGitHub <[email protected]>2022-03-10 08:19:03 +0100
commit4e14cf7607ad3afdbf65272cd5bb61dba4b415da (patch)
tree84922c4407920e9b45502afce15730c0da796a88 /tpl
parent5697348e1732a5f64ee7467283eb0335f2ec36e8 (diff)
downloadhugo-4e14cf7607ad3afdbf65272cd5bb61dba4b415da.tar.gz
hugo-4e14cf7607ad3afdbf65272cd5bb61dba4b415da.zip
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 'tpl')
-rw-r--r--tpl/transform/transform.go13
1 files changed, 5 insertions, 8 deletions
diff --git a/tpl/transform/transform.go b/tpl/transform/transform.go
index 48cfaffff..498c0d674 100644
--- a/tpl/transform/transform.go
+++ b/tpl/transform/transform.go
@@ -20,7 +20,6 @@ import (
"github.com/alecthomas/chroma/lexers"
"github.com/gohugoio/hugo/cache/namedmemcache"
- "github.com/gohugoio/hugo/common/herrors"
"github.com/gohugoio/hugo/markup/converter/hooks"
"github.com/gohugoio/hugo/markup/highlight"
@@ -119,20 +118,18 @@ func (ns *Namespace) HTMLUnescape(s interface{}) (string, error) {
// Markdownify renders a given input from Markdown to HTML.
func (ns *Namespace) Markdownify(s interface{}) (template.HTML, error) {
- defer herrors.Recover()
- ss, err := cast.ToStringE(s)
- if err != nil {
- return "", err
- }
home := ns.deps.Site.Home()
if home == nil {
panic("home must not be nil")
}
- sss, err := home.RenderString(ss)
+ ss, err := home.RenderString(s)
+ if err != nil {
+ return "", err
+ }
// Strip if this is a short inline type of text.
- bb := ns.deps.ContentSpec.TrimShortHTML([]byte(sss))
+ bb := ns.deps.ContentSpec.TrimShortHTML([]byte(ss))
return helpers.BytesToHTML(bb), nil
}