diff --git a/modules/markup/html.go b/modules/markup/html.go index bec9ba2fb49f..908b4de09fa3 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -403,24 +403,19 @@ func (ctx *postProcessCtx) visitNode(node *html.Node, visitText bool) { } case html.ElementNode: if node.Data == "img" { - attrs := node.Attr - for idx, attr := range attrs { + for _, attr := range node.Attr { if attr.Key != "src" { continue } - link := []byte(attr.Val) - if len(link) > 0 && !IsLink(link) { + if len(attr.Val) > 0 && !isLinkStr(attr.Val) && !strings.HasPrefix(attr.Val, "data:image/") { prefix := ctx.urlPrefix if ctx.isWikiMarkdown { prefix = util.URLJoin(prefix, "wiki", "raw") } prefix = strings.Replace(prefix, "/src/", "/media/", 1) - lnk := string(link) - lnk = util.URLJoin(prefix, lnk) - link = []byte(lnk) + attr.Val = util.URLJoin(prefix, attr.Val) } - node.Attr[idx].Val = string(link) } } else if node.Data == "a" { visitText = false diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index 1e39be401ba0..aab2230859c7 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -408,3 +408,20 @@ func Test_ParseClusterFuzz(t *testing.T) { assert.NotContains(t, string(val), "` + + // func PostProcess(rawHTML []byte, urlPrefix string, metas map[string]string, isWikiMarkdown bool) ([]byte, error) + res, err := PostProcess([]byte(data), "https://example.com", localMetas, false) + assert.NoError(t, err) + assert.Equal(t, data, string(res)) +}