From 88c8e903d25d664f75be6987bb477b5072d8d488 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Fri, 9 Oct 2020 16:11:05 +0200 Subject: [PATCH] filter: Fix glob matching on absolute path marker on windows A pattern part containing "/" is used to mark a path or a pattern as absolute. However, on Windows the path separator is "\" such that glob patterns like "?" could match the marker. The code now explicitly skips the marker when the pattern does not represent an absolute path. --- internal/filter/filter.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/filter/filter.go b/internal/filter/filter.go index 50ed6d7fd..1f6f04133 100644 --- a/internal/filter/filter.go +++ b/internal/filter/filter.go @@ -167,13 +167,17 @@ func match(patterns Pattern, strs []string) (matched bool, err error) { } if len(patterns) <= len(strs) { + minOffset := 0 maxOffset := len(strs) - len(patterns) // special case absolute patterns if patterns[0].pattern == "/" { maxOffset = 0 + } else if strs[0] == "/" { + // skip absolute path marker if pattern is not rooted + minOffset = 1 } outer: - for offset := maxOffset; offset >= 0; offset-- { + for offset := maxOffset; offset >= minOffset; offset-- { for i := len(patterns) - 1; i >= 0; i-- { var ok bool