@@ -4,13 +4,16 @@ import better.files.File
44
55import java .nio .file .{Files , FileVisitResult , Path , SimpleFileVisitor }
66import io .shiftleft .js2cpg .core .Config
7- import io .shiftleft .js2cpg .io .FileDefaults ._
7+ import io .shiftleft .js2cpg .io .FileDefaults .*
88import io .shiftleft .utils .IOUtils
99import org .slf4j .LoggerFactory
1010
11+ import java .io .IOException
1112import java .nio .charset .CharsetDecoder
1213import java .nio .charset .CodingErrorAction
1314import java .nio .file .attribute .BasicFileAttributes
15+ import java .nio .file .FileSystemLoopException
16+ import java .nio .file .FileVisitOption
1417import scala .collection .concurrent .TrieMap
1518import scala .collection .{mutable , SortedMap }
1619import scala .io .Codec
@@ -63,7 +66,7 @@ object FileUtils {
6366 filterIgnoredFiles : Boolean = true
6467 ): List [Path ] = {
6568 val fileCollector = FileCollector (PathFilter (rootPath, config, filterIgnoredFiles, extensions))
66- Files .walkFileTree(rootPath, fileCollector)
69+ Files .walkFileTree(rootPath, java.util. Set .of( FileVisitOption . FOLLOW_LINKS ), Integer . MAX_VALUE , fileCollector)
6770 excludedPaths.addAll(fileCollector.excludedPaths)
6871 fileCollector.files
6972 }
@@ -83,6 +86,8 @@ object FileUtils {
8386 if (from.isDirectory) {
8487 Files .walkFileTree(
8588 from.path,
89+ java.util.Set .of(FileVisitOption .FOLLOW_LINKS ),
90+ Integer .MAX_VALUE ,
8691 new SimpleFileVisitor [Path ] {
8792 private def newPath (subPath : Path ): Path =
8893 destination.path.resolve(from.path.relativize(subPath))
@@ -102,6 +107,16 @@ object FileUtils {
102107 }
103108 result
104109 }
110+
111+ override def visitFileFailed (file : Path , exc : IOException ): FileVisitResult = {
112+ exc match {
113+ case _ : FileSystemLoopException =>
114+ logger.warn(s " Cyclic symbolic link detected for file ' $file' - ignoring " )
115+ case _ =>
116+ logger.warn(s " Unable to visit file ' $file' " , exc)
117+ }
118+ FileVisitResult .CONTINUE
119+ }
105120 }
106121 )
107122 } else {
0 commit comments