diff --git a/doublestar_test.go b/doublestar_test.go index 82507d8..6fd41c4 100644 --- a/doublestar_test.go +++ b/doublestar_test.go @@ -99,7 +99,9 @@ var matchTests = []MatchTest{ {"[abc]", "b", true, true, nil, false, false, true, true, 3, 3}, {"**", "", true, true, nil, false, false, false, false, 38, 38}, {"a/**", "a", true, true, nil, false, false, false, true, 7, 7}, + {"a/**/", "a", true, true, nil, false, false, false, false, 4, 4}, {"a/**", "a/", true, true, nil, false, false, false, false, 7, 7}, + {"a/**/", "a/", true, true, nil, false, false, false, false, 4, 4}, {"a/**", "a/b", true, true, nil, false, false, false, true, 7, 7}, {"a/**", "a/b/c", true, true, nil, false, false, false, true, 7, 7}, {"**/c", "c", true, true, nil, !onWindows, false, false, true, 5, 4}, diff --git a/match.go b/match.go index 6581d99..4232c79 100644 --- a/match.go +++ b/match.go @@ -301,9 +301,14 @@ MATCH: } func isZeroLengthPattern(pattern string, separator rune) (ret bool, err error) { - // `/**` is a special case - a pattern such as `path/to/a/**` *should* match - // `path/to/a` because `a` might be a directory - if pattern == "" || pattern == "*" || pattern == "**" || pattern == string(separator)+"**" { + // `/**`, `**/`, and `/**/` are special cases - a pattern such as `path/to/a/**` or `path/to/a/**/` + // *should* match `path/to/a` because `a` might be a directory + if pattern == "" || + pattern == "*" || + pattern == "**" || + pattern == string(separator)+"**" || + pattern == "**"+string(separator) || + pattern == string(separator)+"**"+string(separator) { return true, nil }