diff --git a/modules/markup/html.go b/modules/markup/html.go index 4f9d02a8f..a4ef86de2 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -469,6 +469,9 @@ func shortLinkProcessorFull(ctx *postProcessCtx, node *html.Node, noLink bool) { } else { link = strings.Replace(link, " ", "-", -1) } + if !strings.Contains(link, "/") { + link = url.PathEscape(link) + } } urlPrefix := ctx.urlPrefix if image { diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index fc11532d1..bf7606e1d 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -82,12 +82,18 @@ func TestRender_ShortLinks(t *testing.T) { rawtree := util.URLJoin(AppSubURL, "raw", "master") url := util.URLJoin(tree, "Link") otherURL := util.URLJoin(tree, "Other-Link") + encodedURL := util.URLJoin(tree, "Link%3F") imgurl := util.URLJoin(rawtree, "Link.jpg") otherImgurl := util.URLJoin(rawtree, "Link+Other.jpg") + encodedImgurl := util.URLJoin(rawtree, "Link+%23.jpg") + notencodedImgurl := util.URLJoin(rawtree, "some", "path", "Link+#.jpg") urlWiki := util.URLJoin(AppSubURL, "wiki", "Link") otherURLWiki := util.URLJoin(AppSubURL, "wiki", "Other-Link") + encodedURLWiki := util.URLJoin(AppSubURL, "wiki", "Link%3F") imgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link.jpg") otherImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+Other.jpg") + encodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "Link+%23.jpg") + notencodedImgurlWiki := util.URLJoin(AppSubURL, "wiki", "raw", "some", "path", "Link+#.jpg") favicon := "http://google.com/favicon.ico" test( @@ -134,4 +140,24 @@ func TestRender_ShortLinks(t *testing.T) { "[[Link]] [[Other Link]]", `
`, ``) + test( + "[[Link?]]", + ``, + ``) + test( + "[[Link]] [[Other Link]] [[Link?]]", + ``, + ``) + test( + "[[Link #.jpg]]", + ``, + ``) + test( + "[[Name|Link #.jpg|alt=\"AltName\"|title='Title']]", + ``, + ``) + test( + "[[some/path/Link #.jpg]]", + ``, + ``) }