From 015d6dbe283c0115815e3384d9ba5c60571be829 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 12 Jul 2021 17:00:36 +0200 Subject: [PATCH] Check IsDir error while doing recursive ReadDir --- paths.go | 4 +++- paths_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/paths.go b/paths.go index 0ab287a..6021208 100644 --- a/paths.go +++ b/paths.go @@ -333,7 +333,9 @@ func (p *Path) ReadDirRecursive() (PathList, error) { path := p.Clone().Join(info.Name()) paths.Add(path) - if path.IsDir() { + if isDir, err := path.IsDirCheck(); err != nil { + return nil, err + } else if isDir { subPaths, err := path.ReadDirRecursive() if err != nil { return nil, err diff --git a/paths_test.go b/paths_test.go index c3230d5..da28432 100644 --- a/paths_test.go +++ b/paths_test.go @@ -30,6 +30,7 @@ package paths import ( + "os" "path/filepath" "runtime" "strings" @@ -277,6 +278,19 @@ func TestReadDirRecursive(t *testing.T) { pathEqualsTo(t, "_testdata/symlinktofolder/subfolder/file4", list[13]) pathEqualsTo(t, "_testdata/test.txt", list[14]) pathEqualsTo(t, "_testdata/test.txt.gz", list[15]) + + // Test symlink loop + tmp, err := MkTempDir("", "") + require.NoError(t, err) + defer tmp.RemoveAll() + + folder := tmp.Join("folder") + err = os.Symlink(tmp.String(), folder.String()) + require.NoError(t, err) + + l, err := tmp.ReadDirRecursive() + require.Error(t, err) + require.Nil(t, l) } func TestFilterDirs(t *testing.T) {