mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
markup: Goldmark log "Raw HTML omitted" warning also for inline HTML
Fixes #13013
This commit is contained in:
parent
94b46c36b4
commit
4faaaf9c2f
2 changed files with 62 additions and 8 deletions
|
@ -804,7 +804,7 @@ H~2~0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issue 12997.
|
// Issue 12997.
|
||||||
func TestGoldmarkRawHTMLWarning(t *testing.T) {
|
func TestGoldmarkRawHTMLWarningBlocks(t *testing.T) {
|
||||||
files := `
|
files := `
|
||||||
-- hugo.toml --
|
-- hugo.toml --
|
||||||
disableKinds = ['home','rss','section','sitemap','taxonomy','term']
|
disableKinds = ['home','rss','section','sitemap','taxonomy','term']
|
||||||
|
@ -827,3 +827,27 @@ title: "p1"
|
||||||
b.AssertFileContent("public/p1/index.html", "! <!-- raw HTML omitted -->")
|
b.AssertFileContent("public/p1/index.html", "! <!-- raw HTML omitted -->")
|
||||||
b.AssertLogContains("! WARN")
|
b.AssertLogContains("! WARN")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoldmarkRawHTMLWarningInline(t *testing.T) {
|
||||||
|
files := `
|
||||||
|
-- hugo.toml --
|
||||||
|
disableKinds = ['home','rss','section','sitemap','taxonomy','term']
|
||||||
|
markup.goldmark.renderer.unsafe = false
|
||||||
|
-- content/p1.md --
|
||||||
|
---
|
||||||
|
title: "p1"
|
||||||
|
---
|
||||||
|
<em>raw HTML</em>
|
||||||
|
-- layouts/_default/single.html --
|
||||||
|
{{ .Content }}
|
||||||
|
`
|
||||||
|
|
||||||
|
b := hugolib.Test(t, files, hugolib.TestOptWarn())
|
||||||
|
|
||||||
|
b.AssertFileContent("public/p1/index.html", "<!-- raw HTML omitted -->")
|
||||||
|
b.AssertLogContains("WARN Raw HTML omitted from \"/content/p1.md\"; see https://gohugo.io/getting-started/configuration-markup/#rendererunsafe\nYou can suppress this warning by adding the following to your site configuration:\nignoreLogs = ['warning-goldmark-raw-html']")
|
||||||
|
|
||||||
|
b = hugolib.Test(t, strings.ReplaceAll(files, "markup.goldmark.renderer.unsafe = false", "markup.goldmark.renderer.unsafe = true"), hugolib.TestOptWarn())
|
||||||
|
b.AssertFileContent("public/p1/index.html", "! <!-- raw HTML omitted -->")
|
||||||
|
b.AssertLogContains("! WARN")
|
||||||
|
}
|
||||||
|
|
|
@ -145,6 +145,7 @@ func (r *hugoContextRenderer) SetOption(name renderer.OptionName, value any) {
|
||||||
|
|
||||||
func (r *hugoContextRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
|
func (r *hugoContextRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) {
|
||||||
reg.Register(kindHugoContext, r.handleHugoContext)
|
reg.Register(kindHugoContext, r.handleHugoContext)
|
||||||
|
reg.Register(ast.KindRawHTML, r.renderRawHTML)
|
||||||
reg.Register(ast.KindHTMLBlock, r.renderHTMLBlock)
|
reg.Register(ast.KindHTMLBlock, r.renderHTMLBlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,16 +156,25 @@ func (r *hugoContextRenderer) stripHugoCtx(b []byte) ([]byte, bool) {
|
||||||
return hugoCtxRe.ReplaceAll(b, nil), true
|
return hugoCtxRe.ReplaceAll(b, nil), true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *hugoContextRenderer) logRawHTMLEmittedWarn(w util.BufWriter) {
|
||||||
|
r.logger.Warnidf(constants.WarnGoldmarkRawHTML, "Raw HTML omitted from %q; see https://gohugo.io/getting-started/configuration-markup/#rendererunsafe", r.getPage(w))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *hugoContextRenderer) getPage(w util.BufWriter) any {
|
||||||
|
var p any
|
||||||
|
ctx, ok := w.(*render.Context)
|
||||||
|
if ok {
|
||||||
|
p, _ = render.GetPageAndPageInner(ctx)
|
||||||
|
}
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTML rendering based on Goldmark implementation.
|
||||||
func (r *hugoContextRenderer) renderHTMLBlock(
|
func (r *hugoContextRenderer) renderHTMLBlock(
|
||||||
w util.BufWriter, source []byte, node ast.Node, entering bool,
|
w util.BufWriter, source []byte, node ast.Node, entering bool,
|
||||||
) (ast.WalkStatus, error) {
|
) (ast.WalkStatus, error) {
|
||||||
n := node.(*ast.HTMLBlock)
|
n := node.(*ast.HTMLBlock)
|
||||||
if entering {
|
if entering {
|
||||||
var p any
|
|
||||||
ctx, ok := w.(*render.Context)
|
|
||||||
if ok {
|
|
||||||
p, _ = render.GetPageAndPageInner(ctx)
|
|
||||||
}
|
|
||||||
if r.Unsafe {
|
if r.Unsafe {
|
||||||
l := n.Lines().Len()
|
l := n.Lines().Len()
|
||||||
for i := 0; i < l; i++ {
|
for i := 0; i < l; i++ {
|
||||||
|
@ -173,12 +183,12 @@ func (r *hugoContextRenderer) renderHTMLBlock(
|
||||||
var stripped bool
|
var stripped bool
|
||||||
linev, stripped = r.stripHugoCtx(linev)
|
linev, stripped = r.stripHugoCtx(linev)
|
||||||
if stripped {
|
if stripped {
|
||||||
r.logger.Warnidf(constants.WarnRenderShortcodesInHTML, ".RenderShortcodes detected inside HTML block in %q; this may not be what you intended, see https://gohugo.io/methods/page/rendershortcodes/#limitations", p)
|
r.logger.Warnidf(constants.WarnRenderShortcodesInHTML, ".RenderShortcodes detected inside HTML block in %q; this may not be what you intended, see https://gohugo.io/methods/page/rendershortcodes/#limitations", r.getPage(w))
|
||||||
}
|
}
|
||||||
r.Writer.SecureWrite(w, linev)
|
r.Writer.SecureWrite(w, linev)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
r.logger.Warnidf(constants.WarnGoldmarkRawHTML, "Raw HTML omitted from %q; see https://gohugo.io/getting-started/configuration-markup/#rendererunsafe", p)
|
r.logRawHTMLEmittedWarn(w)
|
||||||
_, _ = w.WriteString("<!-- raw HTML omitted -->\n")
|
_, _ = w.WriteString("<!-- raw HTML omitted -->\n")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -194,6 +204,26 @@ func (r *hugoContextRenderer) renderHTMLBlock(
|
||||||
return ast.WalkContinue, nil
|
return ast.WalkContinue, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *hugoContextRenderer) renderRawHTML(
|
||||||
|
w util.BufWriter, source []byte, node ast.Node, entering bool,
|
||||||
|
) (ast.WalkStatus, error) {
|
||||||
|
if !entering {
|
||||||
|
return ast.WalkSkipChildren, nil
|
||||||
|
}
|
||||||
|
if r.Unsafe {
|
||||||
|
n := node.(*ast.RawHTML)
|
||||||
|
l := n.Segments.Len()
|
||||||
|
for i := 0; i < l; i++ {
|
||||||
|
segment := n.Segments.At(i)
|
||||||
|
_, _ = w.Write(segment.Value(source))
|
||||||
|
}
|
||||||
|
return ast.WalkSkipChildren, nil
|
||||||
|
}
|
||||||
|
r.logRawHTMLEmittedWarn(w)
|
||||||
|
_, _ = w.WriteString("<!-- raw HTML omitted -->")
|
||||||
|
return ast.WalkSkipChildren, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *hugoContextRenderer) handleHugoContext(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
|
func (r *hugoContextRenderer) handleHugoContext(w util.BufWriter, source []byte, node ast.Node, entering bool) (ast.WalkStatus, error) {
|
||||||
if !entering {
|
if !entering {
|
||||||
return ast.WalkContinue, nil
|
return ast.WalkContinue, nil
|
||||||
|
|
Loading…
Reference in a new issue