Merge pull request #108 from danw/globexclude

Prevent glob from accessing hidden files
This commit is contained in:
Dan Willemsen 2016-12-19 15:50:40 -08:00 committed by GitHub
commit b431941604
5 changed files with 45 additions and 0 deletions

View file

@ -131,6 +131,9 @@ func glob(pattern string, hasRecursive bool) (matches, dirs []string, err error)
if err != nil {
return nil, nil, err
}
if file[0] != '.' {
newMatches = filterDotFiles(newMatches)
}
matches = append(matches, newMatches...)
}
}
@ -170,6 +173,11 @@ func walkAllDirs(dir string) (dirs []string, err error) {
}
if info.Mode().IsDir() {
name := info.Name()
if name[0] == '.' && name != "." {
return filepath.SkipDir
}
dirs = append(dirs, path)
}
return nil
@ -203,6 +211,21 @@ matchLoop:
return ret, nil
}
// filterDotFiles filters out files that start with '.'
func filterDotFiles(matches []string) []string {
ret := make([]string, 0, len(matches))
for _, match := range matches {
_, name := filepath.Split(match)
if name[0] == '.' {
continue
}
ret = append(ret, match)
}
return ret
}
// match returns true if name matches pattern using the same rules as filepath.Match, but supporting
// hierarchical patterns (a/*) and recursive globs (**).
func match(pattern, name string) (bool, error) {

View file

@ -417,6 +417,28 @@ var globTestCases = []struct {
excludes: []string{"**/**"},
err: GlobLastRecursiveErr,
},
// If names are excluded by default, but referenced explicitly, they should return results
{
pattern: ".test/*",
matches: []string{".test/a"},
dirs: []string{".test"},
},
{
pattern: ".t*/a",
matches: []string{".test/a"},
dirs: []string{".", ".test"},
},
{
pattern: ".*/.*",
matches: []string{".test/.ing"},
dirs: []string{".", ".test"},
},
{
pattern: ".t*",
matches: []string{".test", ".testing"},
dirs: []string{"."},
},
}
func TestGlob(t *testing.T) {

0
pathtools/testdata/.test/.ing vendored Normal file
View file

0
pathtools/testdata/.test/a vendored Normal file
View file

0
pathtools/testdata/.testing vendored Normal file
View file