From 18fca31550181693b3a834a15b74b564b3605876 Mon Sep 17 00:00:00 2001 From: Chris Hines Date: Tue, 30 May 2017 15:55:47 -0400 Subject: [PATCH] Add test and fix for escaped query values. Reproduces and fixes #238. --- mux_test.go | 12 +++++++++++- regexp.go | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/mux_test.go b/mux_test.go index c695f6c..4340c50 100644 --- a/mux_test.go +++ b/mux_test.go @@ -36,7 +36,7 @@ type routeTest struct { scheme string // the expected scheme of the built URL host string // the expected host of the built URL path string // the expected path of the built URL - query string // the expected query string to match + query string // the expected query string of the built URL pathTemplate string // the expected path template of the route hostTemplate string // the expected host template of the route methods []string // the expected route methods @@ -974,6 +974,16 @@ func TestQueries(t *testing.T) { path: "", shouldMatch: false, }, + { + title: "Queries route with pattern, match, escaped value", + route: new(Route).Queries("foo", "{v1}"), + request: newRequest("GET", "http://localhost?foo=%25bar%26%20%2F%3D%3F"), + vars: map[string]string{"v1": "%bar& /=?"}, + host: "", + path: "", + query: "foo=%25bar%26+%2F%3D%3F", + shouldMatch: true, + }, } for _, test := range tests { diff --git a/regexp.go b/regexp.go index 7451ee0..80d1f78 100644 --- a/regexp.go +++ b/regexp.go @@ -35,7 +35,7 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash, // Now let's parse it. defaultPattern := "[^/]+" if matchQuery { - defaultPattern = "[^?&]*" + defaultPattern = ".*" } else if matchHost { defaultPattern = "[^.]+" matchPrefix = false