From 3499ddab19ac605a090c8c57b5e53a7d38e03d1f Mon Sep 17 00:00:00 2001 From: Mike Busch Date: Tue, 17 Oct 2017 16:29:36 -0400 Subject: [PATCH] use req.URL.EscapedPath() instead of getPath(req) This change drops support of go < 1.5. go1.5 has been officially unsupported since go1.7 was released 2016/08/15. --- mux.go | 25 +------------------------ regexp.go | 6 +++--- 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/mux.go b/mux.go index fb69196d..cf4ac54b 100644 --- a/mux.go +++ b/mux.go @@ -10,7 +10,6 @@ import ( "net/http" "path" "regexp" - "strings" ) var ( @@ -94,7 +93,7 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { if !r.skipClean { path := req.URL.Path if r.useEncodedPath { - path = getPath(req) + path = req.URL.EscapedPath() } // Clean path to canonical form and redirect. if p := cleanPath(path); p != path { @@ -409,28 +408,6 @@ func setCurrentRoute(r *http.Request, val interface{}) *http.Request { // Helpers // ---------------------------------------------------------------------------- -// getPath returns the escaped path if possible; doing what URL.EscapedPath() -// which was added in go1.5 does -func getPath(req *http.Request) string { - if req.RequestURI != "" { - // Extract the path from RequestURI (which is escaped unlike URL.Path) - // as detailed here as detailed in https://golang.org/pkg/net/url/#URL - // for < 1.5 server side workaround - // http://localhost/path/here?v=1 -> /path/here - path := req.RequestURI - path = strings.TrimPrefix(path, req.URL.Scheme+`://`) - path = strings.TrimPrefix(path, req.URL.Host) - if i := strings.LastIndex(path, "?"); i > -1 { - path = path[:i] - } - if i := strings.LastIndex(path, "#"); i > -1 { - path = path[:i] - } - return path - } - return req.URL.Path -} - // cleanPath returns the canonical path for p, eliminating . and .. elements. // Borrowed from the net/http package. func cleanPath(p string) string { diff --git a/regexp.go b/regexp.go index 80d1f785..e83213b7 100644 --- a/regexp.go +++ b/regexp.go @@ -141,7 +141,7 @@ type routeRegexp struct { matchQuery bool // The strictSlash value defined on the route, but disabled if PathPrefix was used. strictSlash bool - // Determines whether to use encoded path from getPath function or unencoded + // Determines whether to use encoded req.URL.EnscapedPath() or unencoded // req.URL.Path for path matching useEncodedPath bool // Expanded regexp. @@ -162,7 +162,7 @@ func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { } path := req.URL.Path if r.useEncodedPath { - path = getPath(req) + path = req.URL.EscapedPath() } return r.regexp.MatchString(path) } @@ -272,7 +272,7 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) } path := req.URL.Path if r.useEncodedPath { - path = getPath(req) + path = req.URL.EscapedPath() } // Store path variables. if v.path != nil {