Merge pull request #108 from danw/globexclude
Prevent glob from accessing hidden files
This commit is contained in:
commit
b431941604
5 changed files with 45 additions and 0 deletions
|
@ -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) {
|
||||
|
|
|
@ -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
0
pathtools/testdata/.test/.ing
vendored
Normal file
0
pathtools/testdata/.test/a
vendored
Normal file
0
pathtools/testdata/.test/a
vendored
Normal file
0
pathtools/testdata/.testing
vendored
Normal file
0
pathtools/testdata/.testing
vendored
Normal file
Loading…
Reference in a new issue