mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
Prevent double escaping of image alt-text in Goldmar typographer
Fixes #11045
This commit is contained in:
parent
32585696be
commit
3f497d496f
2 changed files with 39 additions and 1 deletions
|
@ -584,6 +584,29 @@ rightDoubleQuote = "»"
|
||||||
c.Assert(got, qt.Contains, "<p>A «quote» and ‘another quote’ and a «quote with a ’nested’ quote» and a ‘quote with a «nested» quote’ and an ellipsis…</p>\n")
|
c.Assert(got, qt.Contains, "<p>A «quote» and ‘another quote’ and a «quote with a ’nested’ quote» and a ‘quote with a «nested» quote’ and an ellipsis…</p>\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue #11045
|
||||||
|
func TestTypographerImageAltText(t *testing.T) {
|
||||||
|
c := qt.New(t)
|
||||||
|
|
||||||
|
content := `
|
||||||
|
!["They didn't even say 'hello'!" I exclaimed.](https://example.com/image.jpg)
|
||||||
|
`
|
||||||
|
|
||||||
|
confStr := `
|
||||||
|
[markup]
|
||||||
|
[markup.goldmark]
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
cfg := config.FromTOMLConfigString(confStr)
|
||||||
|
conf := testconfig.GetTestConfig(nil, cfg)
|
||||||
|
|
||||||
|
b := convert(c, conf, content)
|
||||||
|
got := string(b.Bytes())
|
||||||
|
|
||||||
|
c.Assert(got, qt.Contains, "“They didn’t even say ‘hello’!” I exclaimed.")
|
||||||
|
}
|
||||||
|
|
||||||
func unsafeConf() config.AllProvider {
|
func unsafeConf() config.AllProvider {
|
||||||
cfg := config.FromTOMLConfigString(`
|
cfg := config.FromTOMLConfigString(`
|
||||||
[markup]
|
[markup]
|
||||||
|
|
|
@ -225,7 +225,7 @@ func (r *hookedRenderer) renderImageDefault(w util.BufWriter, source []byte, nod
|
||||||
_, _ = w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
|
_, _ = w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
|
||||||
}
|
}
|
||||||
_, _ = w.WriteString(`" alt="`)
|
_, _ = w.WriteString(`" alt="`)
|
||||||
_, _ = w.Write(util.EscapeHTML(n.Text(source)))
|
_, _ = w.Write(nodeToHTMLText(n, source))
|
||||||
_ = w.WriteByte('"')
|
_ = w.WriteByte('"')
|
||||||
if n.Title != nil {
|
if n.Title != nil {
|
||||||
_, _ = w.WriteString(` title="`)
|
_, _ = w.WriteString(` title="`)
|
||||||
|
@ -475,3 +475,18 @@ func (e *links) Extend(m goldmark.Markdown) {
|
||||||
util.Prioritized(newLinkRenderer(e.cfg), 100),
|
util.Prioritized(newLinkRenderer(e.cfg), 100),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Borrowed from Goldmark.
|
||||||
|
func nodeToHTMLText(n ast.Node, source []byte) []byte {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
for c := n.FirstChild(); c != nil; c = c.NextSibling() {
|
||||||
|
if s, ok := c.(*ast.String); ok && s.IsCode() {
|
||||||
|
buf.Write(s.Text(source))
|
||||||
|
} else if !c.HasChildren() {
|
||||||
|
buf.Write(util.EscapeHTML(c.Text(source)))
|
||||||
|
} else {
|
||||||
|
buf.Write(nodeToHTMLText(c, source))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return buf.Bytes()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue