1
0
Fork 0
forked from forgejo/forgejo

[BUG] Restrict when to make link absolute in markdown

- In markdown, links are proccessed to be made absolute against the
relevant base in that context. Such that `./src` will be transformed
into `http://example.com/owner/repo/src/branch/main/src`.
- Don't try to make the link absolute if the link has a schema that's
defined in `[markdown].CUSTOM_URL_SCHEMES`, because they can't be made
absolute and doing so could lead to problems (see test case, double
slash was transformed to single slash).
- Adds unit test.
- Resolves https://codeberg.org/Codeberg/Community/issues/1489
This commit is contained in:
Gusted 2024-02-19 20:40:53 +01:00
parent cfd6420a0e
commit 65b9a959b8
No known key found for this signature in database
GPG key ID: FD821B732837125F
2 changed files with 38 additions and 4 deletions

View file

@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/markup/markdown"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/test"
"code.gitea.io/gitea/modules/util"
"github.com/stretchr/testify/assert"
@ -1170,3 +1171,29 @@ space</p>
assert.Equal(t, c.Expected, result, "Unexpected result in testcase %v", i)
}
}
func TestCustomMarkdownURL(t *testing.T) {
defer test.MockVariableValue(&setting.Markdown.CustomURLSchemes, []string{"abp"})()
setting.AppURL = AppURL
setting.AppSubURL = AppSubURL
test := func(input, expected string) {
buffer, err := markdown.RenderString(&markup.RenderContext{
Ctx: git.DefaultContext,
Links: markup.Links{
Base: setting.AppSubURL,
BranchPath: "branch/main",
},
}, input)
assert.NoError(t, err)
assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer))
}
test("[test](abp:subscribe?location=https://codeberg.org/filters.txt&amp;title=joy)",
`<p><a href="abp:subscribe?location=https://codeberg.org/filters.txt&amp;title=joy" rel="nofollow">test</a></p>`)
// Ensure that the schema itself without `:` is still made absolute.
test("[test](abp)",
`<p><a href="http://localhost:3000/gogits/gogs/src/branch/main/abp" rel="nofollow">test</a></p>`)
}