From e4ee1b89ad21f46dab96c9099f554bef4602650b Mon Sep 17 00:00:00 2001 From: Cameron Moore Date: Wed, 27 Apr 2016 09:54:44 -0500 Subject: [PATCH] helpers: Use net/url for URL parsing in AbsURL Fixes #2112 --- helpers/url.go | 7 ++++++- helpers/url_test.go | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/helpers/url.go b/helpers/url.go index 9d3db8004..00bcd67c9 100644 --- a/helpers/url.go +++ b/helpers/url.go @@ -148,7 +148,12 @@ func MakePermalink(host, plink string) *url.URL { // AbsURL creates a absolute URL from the relative path given and the BaseURL set in config. func AbsURL(path string) string { - if strings.HasPrefix(path, "http") || strings.HasPrefix(path, "//") { + url, err := url.Parse(path) + if err != nil { + return path + } + + if url.IsAbs() || strings.HasPrefix(path, "//") { return path } diff --git a/helpers/url_test.go b/helpers/url_test.go index 4774accbb..fd8cd5137 100644 --- a/helpers/url_test.go +++ b/helpers/url_test.go @@ -52,9 +52,11 @@ func TestAbsURL(t *testing.T) { {"", "http://base/ace/", "http://base/ace/"}, {"/test/2/foo/", "http://base", "http://base/test/2/foo/"}, {"http://abs", "http://base/", "http://abs"}, + {"schema://abs", "http://base/", "schema://abs"}, {"//schemaless", "http://base/", "//schemaless"}, {"test/2/foo/", "http://base/path", "http://base/path/test/2/foo/"}, {"/test/2/foo/", "http://base/path", "http://base/test/2/foo/"}, + {"http//foo", "http://base/path", "http://base/path/http/foo"}, } for _, test := range tests {