From e1d43021cab6ff538de5855f1b35d72e9c4e867f Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Sat, 10 Jun 2023 09:26:35 -0700 Subject: [PATCH] helpers: Improve schema detection when creating relative URLs Fixes #11080 --- helpers/url.go | 8 +++++++- helpers/url_test.go | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/helpers/url.go b/helpers/url.go index a4c20c6ad8d..bd336545b08 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 bb7f6eed747..6d496ce8ef6 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"},