From c65e49d72f823d10d045dc7a50fee96953527b76 Mon Sep 17 00:00:00 2001 From: zeripath Date: Sun, 4 Jul 2021 15:28:29 +0100 Subject: [PATCH] Fix relative links in postprocessed images (#16334) (#16340) * Fix relative links in postprocessed images (#16334) If a pre-post-processed file contains relative img tags these need to be updated and joined correctly with the prefix. Finally, the node attributes need to be updated. Fix #16308 Signed-off-by: Andrew Thornton Co-authored-by: 6543 <6543@obermui.de> --- modules/markup/html.go | 3 ++- modules/markup/html_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/modules/markup/html.go b/modules/markup/html.go index 216a1f20a3..7b9844bf75 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -401,7 +401,7 @@ func (ctx *postProcessCtx) visitNode(node *html.Node, visitText bool) { } case html.ElementNode: if node.Data == "img" { - for _, attr := range node.Attr { + for i, attr := range node.Attr { if attr.Key != "src" { continue } @@ -414,6 +414,7 @@ func (ctx *postProcessCtx) visitNode(node *html.Node, visitText bool) { attr.Val = util.URLJoin(prefix, attr.Val) } + node.Attr[i] = attr } } else if node.Data == "a" { visitText = false diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index 4d6344a720..dddb3ade0d 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -384,6 +384,32 @@ func TestRender_ShortLinks(t *testing.T) { `

[[foobar]]

`) } +func TestRender_RelativeImages(t *testing.T) { + setting.AppURL = AppURL + setting.AppSubURL = AppSubURL + tree := util.URLJoin(AppSubURL, "src", "master") + + test := func(input, expected, expectedWiki string) { + buffer := markdown.RenderString(input, tree, localMetas) + assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) + buffer = markdown.RenderWiki([]byte(input), setting.AppSubURL, localMetas) + assert.Equal(t, strings.TrimSpace(expectedWiki), strings.TrimSpace(buffer)) + } + + rawwiki := util.URLJoin(AppSubURL, "wiki", "raw") + mediatree := util.URLJoin(AppSubURL, "media", "master") + + test( + ``, + ``, + ``) + + test( + ``, + ``, + ``) +} + func Test_ParseClusterFuzz(t *testing.T) { setting.AppURL = AppURL setting.AppSubURL = AppSubURL