Skip to content

Commit 2d893db

Browse files
Catch visitFileFailed during project copy process (#330)
1 parent 30712bb commit 2d893db

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

src/main/scala/io/shiftleft/js2cpg/core/Js2Cpg.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import better.files.File.LinkOptions
66
import io.shiftleft.js2cpg.passes._
77
import io.shiftleft.js2cpg.io.FileDefaults._
88
import io.shiftleft.js2cpg.io.FileUtils
9-
import io.shiftleft.js2cpg.parser.{FreshJsonParser, PackageJsonParser}
9+
import io.shiftleft.js2cpg.parser.PackageJsonParser
1010
import io.shiftleft.js2cpg.preprocessing.NuxtTranspiler
1111
import io.shiftleft.js2cpg.preprocessing.TranspilationRunner
1212
import io.shiftleft.js2cpg.utils.MemoryMetrics

src/main/scala/io/shiftleft/js2cpg/io/FileCollector.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ class FileCollector private (pathFilter: PathFilter) extends SimpleFileVisitor[P
5151

5252
override def visitFileFailed(file: Path, exc: IOException): FileVisitResult = {
5353
exc match {
54-
case loop: FileSystemLoopException =>
55-
logger.debug(s"Cyclic symbolic link detected for file '$file'", loop)
54+
case _: FileSystemLoopException =>
55+
logger.warn(s"Cyclic symbolic link detected for file '$file' - ignoring")
5656
case _ =>
57-
logger.debug(s"Unable to visit file '$file'", exc)
57+
logger.warn(s"Unable to visit file '$file'", exc)
5858
}
5959
FileVisitResult.CONTINUE
6060
}

src/main/scala/io/shiftleft/js2cpg/io/FileUtils.scala

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ import better.files.File
44

55
import java.nio.file.{Files, FileVisitResult, Path, SimpleFileVisitor}
66
import io.shiftleft.js2cpg.core.Config
7-
import io.shiftleft.js2cpg.io.FileDefaults._
7+
import io.shiftleft.js2cpg.io.FileDefaults.*
88
import io.shiftleft.utils.IOUtils
99
import org.slf4j.LoggerFactory
1010

11+
import java.io.IOException
1112
import java.nio.charset.CharsetDecoder
1213
import java.nio.charset.CodingErrorAction
1314
import java.nio.file.attribute.BasicFileAttributes
15+
import java.nio.file.FileSystemLoopException
16+
import java.nio.file.FileVisitOption
1417
import scala.collection.concurrent.TrieMap
1518
import scala.collection.{mutable, SortedMap}
1619
import 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

Comments
 (0)