diff --git a/path.go b/path.go index 2f70c7f742..21a3d6c4d0 100644 --- a/path.go +++ b/path.go @@ -58,7 +58,7 @@ var ( // list of chars for the parameter recognising parameterStartChars = []byte{wildcardParam, plusParam, paramStarterChar} // list of chars of delimiters and the starting parameter name char - parameterDelimiterChars = append([]byte{paramStarterChar}, routeDelimiter...) + parameterDelimiterChars = append([]byte{paramStarterChar, escapeChar}, routeDelimiter...) // list of chars to find the end of a parameter parameterEndChars = append([]byte{optionalParam}, parameterDelimiterChars...) ) diff --git a/path_test.go b/path_test.go index 246cd58f5d..9a237520dd 100644 --- a/path_test.go +++ b/path_test.go @@ -47,6 +47,17 @@ func Test_Path_parseRoute(t *testing.T) { }, params: nil, }, rp) + + rp = parseRoute("/v1/some/resource/:name\\:customVerb") + utils.AssertEqual(t, routeParser{ + segs: []*routeSegment{ + {Const: "/v1/some/resource/", Length: 18}, + {IsParam: true, ParamName: "name", ComparePart: ":customVerb", PartCount: 1}, + {Const: ":customVerb", Length: 11, IsLast: true}, + }, + params: []string{"name"}, + }, rp) + // heavy test with escaped charaters rp = parseRoute("/v1/some/resource/name\\\\:customVerb?\\?/:param/*") utils.AssertEqual(t, routeParser{ @@ -170,6 +181,10 @@ func Test_Path_matchParams(t *testing.T) { {url: "/v1/some/resource/name:customVerb", params: nil, match: true}, {url: "/v1/some/resource/name:test", params: nil, match: false}, }) + testCase("/v1/some/resource/:name\\:customVerb", []testparams{ + {url: "/v1/some/resource/test:customVerb", params: []string{"test"}, match: true}, + {url: "/v1/some/resource/test:test", params: nil, match: false}, + }) testCase("/v1/some/resource/name\\\\:customVerb?\\?/:param/*", []testparams{ {url: "/v1/some/resource/name:customVerb??/test/optionalWildCard/character", params: []string{"test", "optionalWildCard/character"}, match: true}, {url: "/v1/some/resource/name:customVerb??/test", params: []string{"test", ""}, match: true},