From 848e033196eec7dc2274338d0a67c1bb27be0a9f Mon Sep 17 00:00:00 2001 From: Andrea Spacca Date: Sat, 23 Jun 2018 11:47:27 +0200 Subject: [PATCH] ISSUE-109 fragment and query separators not escpade --- server/handlers.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/server/handlers.go b/server/handlers.go index 8c55db2..1576fa5 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -411,7 +411,22 @@ func (s *Server) putHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") relativeURL, _ := url.Parse(path.Join(token, filename)) - fmt.Fprint(w, getURL(r).ResolveReference(relativeURL).String()) + + fmt.Fprint(w, escapeFilename(r, relativeURL)) +} + +func escapeFilename(r *http.Request, u *url.URL) string { + if u.RawQuery != "" { + u.Path = fmt.Sprintf("%s?%s", u.Path, url.QueryEscape(u.RawQuery)) + u.RawQuery = "" + } + + if u.Fragment != "" { + u.Path = fmt.Sprintf("%s#%s", u.Path, u.Fragment) + u.Fragment = "" + } + + return getURL(r).ResolveReference(u).String() } func getURL(r *http.Request) *url.URL {