From 66114cb155f2a975ecdc9f3d2d89a9df1142791a Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Sat, 8 Jul 2023 13:42:13 -0600 Subject: [PATCH] caddyhttp: Trim dot/space only on Windows (fix #5613) Follow-up to #2917. Path matcher needs to trim dots and spaces but only on Windows. --- modules/caddyhttp/matchers.go | 5 ++++- modules/caddyhttp/matchers_test.go | 12 +++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/caddyhttp/matchers.go b/modules/caddyhttp/matchers.go index f5f9a0f6..fb84875d 100644 --- a/modules/caddyhttp/matchers.go +++ b/modules/caddyhttp/matchers.go @@ -25,6 +25,7 @@ import ( "path" "reflect" "regexp" + "runtime" "sort" "strconv" "strings" @@ -395,7 +396,9 @@ func (m MatchPath) Match(r *http.Request) bool { // security risk (cry) if PHP files end up being served // as static files, exposing the source code, instead of // being matched by *.php to be treated as PHP scripts. - reqPath = strings.TrimRight(reqPath, ". ") + if runtime.GOOS == "windows" { // issue #5613 + reqPath = strings.TrimRight(reqPath, ". ") + } repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) diff --git a/modules/caddyhttp/matchers_test.go b/modules/caddyhttp/matchers_test.go index 4f5da69a..041975d8 100644 --- a/modules/caddyhttp/matchers_test.go +++ b/modules/caddyhttp/matchers_test.go @@ -21,6 +21,7 @@ import ( "net/http/httptest" "net/url" "os" + "runtime" "testing" "github.com/caddyserver/caddy/v2" @@ -253,11 +254,6 @@ func TestPathMatcher(t *testing.T) { input: "/FOOOO", expect: true, }, - { - match: MatchPath{"*.php"}, - input: "/foo/index.php. .", - expect: true, - }, { match: MatchPath{"/foo/bar.txt"}, input: "/foo/BAR.txt", @@ -435,8 +431,10 @@ func TestPathMatcher(t *testing.T) { func TestPathMatcherWindows(t *testing.T) { // only Windows has this bug where it will ignore - // trailing dots and spaces in a filename, but we - // test for it on all platforms to be more consistent + // trailing dots and spaces in a filename + if runtime.GOOS != "windows" { + return + } req := &http.Request{URL: &url.URL{Path: "/index.php . . .."}} repl := caddy.NewReplacer()