diff --git a/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/passes/ConfigFileCreationPassTests.scala b/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/passes/ConfigFileCreationPassTests.scala index 46412c53a87e..941245ef5663 100644 --- a/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/passes/ConfigFileCreationPassTests.scala +++ b/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/passes/ConfigFileCreationPassTests.scala @@ -61,4 +61,25 @@ class ConfigFileCreationPassTests extends JavaSrcCode2CpgFixture { } } + "it should populate config files correctly when they are nested" in { + val configFile1Path = Paths.get("config.properties").toString + val configFile2Path = Paths.get("someDir", "config.properties").toString + val cpg = code("""public class Foo{} + |""".stripMargin) + .moreCode(code = "config.file=1", fileName = configFile1Path) + .moreCode(code = "config.file=2", fileName = configFile2Path) + + cpg.typeDecl.name("Foo").nonEmpty shouldBe true + cpg.configFile.sortBy(_.name).l match { + case List(configFile1, configFile2) => + configFile1.name shouldBe configFile1Path + configFile1.content shouldBe "config.file=1" + + configFile2.name shouldBe configFile2Path + configFile2.content shouldBe "config.file=2" + + case result => fail(s"Expected two config files but got $result") + } + } + } diff --git a/joern-cli/frontends/x2cpg/src/main/scala/io/joern/x2cpg/passes/frontend/XConfigFileCreationPass.scala b/joern-cli/frontends/x2cpg/src/main/scala/io/joern/x2cpg/passes/frontend/XConfigFileCreationPass.scala index 27ca76ae5115..a8a6d984cda9 100644 --- a/joern-cli/frontends/x2cpg/src/main/scala/io/joern/x2cpg/passes/frontend/XConfigFileCreationPass.scala +++ b/joern-cli/frontends/x2cpg/src/main/scala/io/joern/x2cpg/passes/frontend/XConfigFileCreationPass.scala @@ -55,7 +55,7 @@ abstract class XConfigFileCreationPass(cpg: Cpg, private val rootDir: Option[Str } private def configFileName(configFile: File): String = { - Try(Paths.get(rootDir.get).toAbsolutePath) + Try(Paths.get(rootDir.getOrElse(cpg.metaData.root.head)).toAbsolutePath) .map(_.relativize(configFile.path.toAbsolutePath).toString) .getOrElse(configFile.name) }