summaryrefslogtreecommitdiffstats
path: root/helpers
diff options
context:
space:
mode:
authorJoe Mooring <joe.mooring@veriphor.com>2023-06-10 09:26:35 -0700
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-06-12 15:01:30 +0200
commite1d43021cab6ff538de5855f1b35d72e9c4e867f (patch)
tree0d77dd1727be2bc29c2e702efe81487c73476f98 /helpers
parent5db215d4d6e4a0e353ea9aa21441d9ca4d7caf12 (diff)
helpers: Improve schema detection when creating relative URLs
Fixes #11080
Diffstat (limited to 'helpers')
-rw-r--r--helpers/url.go8
-rw-r--r--helpers/url_test.go4
2 files changed, 11 insertions, 1 deletions
diff --git a/helpers/url.go b/helpers/url.go
index a4c20c6ad..bd336545b 100644
--- a/helpers/url.go
+++ b/helpers/url.go
@@ -152,7 +152,13 @@ func (p *PathSpec) getBaseURLRoot(path string) string {
func (p *PathSpec) RelURL(in string, addLanguage bool) string {
baseURL := p.getBaseURLRoot(in)
canonifyURLs := p.Cfg.CanonifyURLs()
- if (!strings.HasPrefix(in, baseURL) && strings.HasPrefix(in, "http")) || strings.HasPrefix(in, "//") {
+
+ url, err := url.Parse(in)
+ if err != nil {
+ return in
+ }
+
+ if (!strings.HasPrefix(in, baseURL) && url.IsAbs()) || strings.HasPrefix(in, "//") {
return in
}
diff --git a/helpers/url_test.go b/helpers/url_test.go
index bb7f6eed7..6d496ce8e 100644
--- a/helpers/url_test.go
+++ b/helpers/url_test.go
@@ -177,6 +177,10 @@ func doTestRelURL(t testing.TB, defaultInSubDir, addLanguage, multilingual bool,
{"/foo/bar", "https://example.org/foo/", false, "MULTI/foo/bar"},
{"foo/bar", "https://example.org/foo/", false, "/fooMULTI/foo/bar"},
+ // Issue 11080
+ {"mailto:a@b.com", "http://base/", false, "mailto:a@b.com"},
+ {"ftp://b.com/a.txt", "http://base/", false, "ftp://b.com/a.txt"},
+
{"/test/foo", "http://base/", false, "MULTI/test/foo"},
{"/" + lang + "/test/foo", "http://base/", false, "/" + lang + "/test/foo"},
{lang + "/test/foo", "http://base/", false, "/" + lang + "/test/foo"},