Fix #4081 Check for leading / in base before removing it (#4083)

This commit is contained in:
Antoine GIRARD 2018-05-30 17:46:31 +02:00 committed by techknowlogick
parent 1177a19a5b
commit 561f459364
2 changed files with 8 additions and 2 deletions

View file

@ -129,8 +129,8 @@ func URLJoin(base string, elems ...string) string {
return "" return ""
} }
joinedURL := baseURL.ResolveReference(argURL).String() joinedURL := baseURL.ResolveReference(argURL).String()
if !baseURL.IsAbs() { if !baseURL.IsAbs() && !strings.HasPrefix(base, "/") {
return joinedURL[1:] // Removing leading '/' return joinedURL[1:] // Removing leading '/' if needed
} }
return joinedURL return joinedURL
} }

View file

@ -85,6 +85,12 @@ func TestURLJoin(t *testing.T) {
"a/", "b/c/", "/../d/"), "a/", "b/c/", "/../d/"),
newTest("https://try.gitea.io/a/b/c#d", newTest("https://try.gitea.io/a/b/c#d",
"https://try.gitea.io", "a/b", "c#d"), "https://try.gitea.io", "a/b", "c#d"),
newTest("/a/b/d",
"/a/", "b/c/", "/../d/"),
newTest("/a/b/c",
"/a", "b/c/"),
newTest("/a/b/c#hash",
"/a", "b/c#hash"),
} { } {
assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...)) assert.Equal(t, test.Expected, URLJoin(test.Base, test.Elements...))
} }