From b62f8e058270aff37621b69a9768235a01e8bd34 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 16 Mar 2020 16:08:33 -0600 Subject: caddyhttp: Support path matcher of "*" without panic --- modules/caddyhttp/matchers.go | 10 +++++++++- modules/caddyhttp/matchers_test.go | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/modules/caddyhttp/matchers.go b/modules/caddyhttp/matchers.go index 6b57ead..988c92d 100644 --- a/modules/caddyhttp/matchers.go +++ b/modules/caddyhttp/matchers.go @@ -211,9 +211,17 @@ func (m MatchPath) Match(r *http.Request) bool { for _, matchPath := range m { matchPath = repl.ReplaceAll(matchPath, "") + // special case: whole path is wildcard; this is unnecessary + // as it matches all requests, which is the same as no matcher + if matchPath == "*" { + return true + } + // special case: first and last characters are wildcard, // treat it as a fast substring match - if strings.HasPrefix(matchPath, "*") && strings.HasSuffix(matchPath, "*") { + if len(matchPath) > 1 && + strings.HasPrefix(matchPath, "*") && + strings.HasSuffix(matchPath, "*") { if strings.Contains(lowerPath, matchPath[1:len(matchPath)-1]) { return true } diff --git a/modules/caddyhttp/matchers_test.go b/modules/caddyhttp/matchers_test.go index 3b5afd2..1e50776 100644 --- a/modules/caddyhttp/matchers_test.go +++ b/modules/caddyhttp/matchers_test.go @@ -252,6 +252,26 @@ func TestPathMatcher(t *testing.T) { input: "/foo/BAR.txt", expect: true, }, + { + match: MatchPath{"*"}, + input: "/", + expect: true, + }, + { + match: MatchPath{"*"}, + input: "/foo/bar", + expect: true, + }, + { + match: MatchPath{"**"}, + input: "/", + expect: true, + }, + { + match: MatchPath{"**"}, + input: "/foo/bar", + expect: true, + }, } { req := &http.Request{URL: &url.URL{Path: tc.input}} repl := caddy.NewReplacer() -- cgit v1.2.3