Skip to content

Commit 049c2ff

Browse files
[x2cpg] Use SourceFiles.filterFile logic to also filter config files (#5641)
* Use SourceFiles.filterFile logic to also filter config files
1 parent 01b563b commit 049c2ff

File tree

13 files changed

+46
-42
lines changed

13 files changed

+46
-42
lines changed

joern-cli/frontends/javasrc2cpg/src/main/scala/io/joern/javasrc2cpg/JavaSrc2Cpg.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class JavaSrc2Cpg extends X2CpgFrontend {
2727
astCreationPass.sourceParser.cleanupDelombokOutput()
2828
astCreationPass.clearJavaParserCaches()
2929
new OuterClassRefPass(cpg).createAndApply()
30-
JavaConfigFileCreationPass(cpg).createAndApply()
30+
JavaConfigFileCreationPass(cpg, config = config).createAndApply()
3131
if (!config.skipTypeInfPass) {
3232
TypeNodePass.withRegisteredTypes(astCreationPass.global.usedTypes.keys().asScala.toList, cpg).createAndApply()
3333
new TypeInferencePass(cpg).createAndApply()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
basic excluded properties

joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/passes/ConfigFileCreationPassTests.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.joern.javasrc2cpg.passes
22

33
import flatgraph.misc.TestUtils.*
4+
import io.joern.javasrc2cpg.Config
45
import io.joern.javasrc2cpg.testfixtures.JavaSrcCode2CpgFixture
56
import io.joern.x2cpg.passes.frontend.JavaConfigFileCreationPass
67
import io.shiftleft.semanticcpg.utils.FileUtil.*
@@ -17,9 +18,10 @@ class ConfigFileCreationPassTests extends JavaSrcCode2CpgFixture {
1718
ProjectRoot.relativise("joern-cli/frontends/javasrc2cpg/src/test/resources/config_tests")
1819

1920
"it should find the correct config files" in {
20-
val cpg = Cpg.from(_.addNode(NewMetaData().root(testConfigDir)))
21+
val cpg = Cpg.from(_.addNode(NewMetaData().root(testConfigDir)))
22+
val config = Config().withIgnoredFilesRegex(".*excluded.*").withDefaultIgnoredFilesRegex(Nil)
2123

22-
val foundFiles = new JavaConfigFileCreationPass(cpg).generateParts().map(_.absolutePathAsString)
24+
val foundFiles = new JavaConfigFileCreationPass(cpg, config = config).generateParts().map(_.absolutePathAsString)
2325
val absoluteConfigDir = Paths.get(testConfigDir).absolutePathAsString
2426
foundFiles should contain theSameElementsAs Array(
2527
Paths.get(absoluteConfigDir, "application.conf").toString,

joern-cli/frontends/jimple2cpg/src/main/scala/io/joern/jimple2cpg/Jimple2Cpg.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class Jimple2Cpg extends X2CpgFrontend {
129129
.withRegisteredTypes(global.usedTypes.keys().asScala.toList, cpg)
130130
.createAndApply()
131131
DeclarationRefPass(cpg).createAndApply()
132-
JavaConfigFileCreationPass(cpg, Option(tmpDir.toString)).createAndApply()
132+
JavaConfigFileCreationPass(cpg, Option(tmpDir.toString), config).createAndApply()
133133
}
134134

135135
private def decompileClassFiles(classFiles: List[ClassFile], decompileJava: Boolean): Unit = {

joern-cli/frontends/pysrc2cpg/src/main/scala/io/joern/pysrc2cpg/ConfigFileCreationPass.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import io.shiftleft.codepropertygraph.generated.Cpg
55

66
import java.nio.file.Path
77

8-
class ConfigFileCreationPass(cpg: Cpg, requirementsTxt: String = "requirement.txt")
9-
extends XConfigFileCreationPass(cpg) {
8+
class ConfigFileCreationPass(cpg: Cpg, requirementsTxt: String = "requirement.txt", config: Py2CpgOnFileSystemConfig)
9+
extends XConfigFileCreationPass(cpg, config = config) {
1010

1111
override val configFileFilters: List[Path => Boolean] = List(
1212
// TOML files

joern-cli/frontends/pysrc2cpg/src/main/scala/io/joern/pysrc2cpg/Py2Cpg.scala

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,22 @@ object Py2Cpg {
2525
* @param schemaValidationMode
2626
* The boolean switch for enabling or disabling early schema checking during AST creation.
2727
*/
28-
class Py2Cpg(
29-
inputProviders: Iterable[Py2Cpg.InputProvider],
30-
outputCpg: Cpg,
31-
inputPath: String,
32-
requirementsTxt: String = "requirements.txt",
33-
schemaValidationMode: ValidationMode,
34-
enableFileContent: Boolean
35-
) {
28+
class Py2Cpg(inputProviders: Iterable[Py2Cpg.InputProvider], outputCpg: Cpg, config: Py2CpgOnFileSystemConfig) {
3629
private val diffGraph = Cpg.newDiffGraphBuilder
3730
private val nodeBuilder = new NodeBuilder(diffGraph)
3831
private val edgeBuilder = new EdgeBuilder(diffGraph)
3932

4033
def buildCpg(): Unit = {
41-
nodeBuilder.metaNode(Languages.PYTHONSRC, version = "").root(inputPath + java.io.File.separator)
34+
nodeBuilder.metaNode(Languages.PYTHONSRC, version = "").root(config.inputPath + java.io.File.separator)
4235
val globalNamespaceBlock =
4336
nodeBuilder.namespaceBlockNode(Constants.GLOBAL_NAMESPACE, Constants.GLOBAL_NAMESPACE, "N/A")
4437
nodeBuilder.typeNode(Constants.ANY, Constants.ANY)
4538
val anyTypeDecl =
4639
nodeBuilder.typeDeclNode(Constants.ANY, Constants.ANY, "N/A", Nil, LineAndColumn(1, 1, 1, 1, 1, 1))
4740
edgeBuilder.astEdge(anyTypeDecl, globalNamespaceBlock, 0)
4841
DiffGraphApplier.applyDiff(outputCpg.graph, diffGraph)
49-
new CodeToCpg(outputCpg, inputProviders, schemaValidationMode, enableFileContent).createAndApply()
50-
new ConfigFileCreationPass(outputCpg, requirementsTxt).createAndApply()
42+
new CodeToCpg(outputCpg, inputProviders, config.schemaValidation, !config.disableFileContent).createAndApply()
43+
new ConfigFileCreationPass(outputCpg, config.requirementsTxt, config).createAndApply()
5144
new DependenciesFromRequirementsTxtPass(outputCpg).createAndApply()
5245
}
5346
}

joern-cli/frontends/pysrc2cpg/src/main/scala/io/joern/pysrc2cpg/Py2CpgOnFileSystem.scala

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,7 @@ class Py2CpgOnFileSystem extends X2CpgFrontend {
9797
Py2Cpg.InputPair(content, inputPath.relativize(inputFile).toString)
9898
}
9999
}
100-
val py2Cpg = new Py2Cpg(
101-
inputProviders,
102-
cpg,
103-
config.inputPath,
104-
config.requirementsTxt,
105-
config.schemaValidation,
106-
!config.disableFileContent
107-
)
100+
val py2Cpg = new Py2Cpg(inputProviders, cpg, config)
108101
py2Cpg.buildCpg()
109102
}
110103
}

joern-cli/frontends/pysrc2cpg/src/test/scala/io/joern/pysrc2cpg/testfixtures/Py2CpgTestContext.scala

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.joern.pysrc2cpg.testfixtures
22

3-
import io.joern.pysrc2cpg.Py2Cpg
3+
import io.joern.pysrc2cpg.{Py2Cpg, Py2CpgOnFileSystemConfig}
44
import io.joern.x2cpg.ValidationMode
55
import io.joern.x2cpg.X2Cpg.defaultOverlayCreators
66
import io.shiftleft.codepropertygraph.generated.Cpg
77
import io.shiftleft.semanticcpg.layers.LayerCreatorContext
8+
import io.shiftleft.semanticcpg.utils.FileUtil
89

910
import scala.collection.mutable
1011

@@ -25,7 +26,7 @@ class Py2CpgTestContext {
2526

2627
private val codeAndFile = mutable.ArrayBuffer.empty[Py2Cpg.InputPair]
2728
private var buildResult = Option.empty[Cpg]
28-
private val absTestFilePath = "<absoluteTestPath>/"
29+
private val absTestFilePath = "absoluteTestPath/"
2930
private var enableFileContent = true
3031

3132
def withEnabledFileContent(value: Boolean): Py2CpgTestContext = {
@@ -45,16 +46,17 @@ class Py2CpgTestContext {
4546
}
4647

4748
def buildCpg: Cpg = {
49+
val cpgOutFile = FileUtil.newTemporaryFile(suffix = "cpg.bin")
50+
FileUtil.deleteOnExit(cpgOutFile)
51+
val config = Py2CpgOnFileSystemConfig()
52+
.withInputPath(absTestFilePath)
53+
.withOutputPath(cpgOutFile.toString)
54+
.withSchemaValidation(ValidationMode.Enabled)
55+
.withDisableFileContent(!enableFileContent)
4856
if (buildResult.isEmpty) {
4957
val cpg = new Cpg()
5058
val py2Cpg =
51-
new Py2Cpg(
52-
codeAndFile.map(inputPair => () => inputPair),
53-
cpg,
54-
absTestFilePath,
55-
schemaValidationMode = ValidationMode.Enabled,
56-
enableFileContent = enableFileContent
57-
)
59+
new Py2Cpg(codeAndFile.map(inputPair => () => inputPair), cpg, config)
5860
py2Cpg.buildCpg()
5961

6062
val context = new LayerCreatorContext(cpg)

joern-cli/frontends/rubysrc2cpg/src/main/scala/io/joern/rubysrc2cpg/RubySrc2Cpg.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class RubySrc2Cpg extends X2CpgFrontend {
4040
override def createCpg(config: Config): Try[Cpg] = {
4141
withNewEmptyCpg(config.outputPath, config: Config) { (cpg, config) =>
4242
new MetaDataPass(cpg, Languages.RUBYSRC, config.inputPath).createAndApply()
43-
new ConfigFileCreationPass(cpg).createAndApply()
43+
new ConfigFileCreationPass(cpg, config).createAndApply()
4444
new DependencyPass(cpg).createAndApply()
4545
createCpgAction(cpg, config)
4646
}

joern-cli/frontends/rubysrc2cpg/src/main/scala/io/joern/rubysrc2cpg/passes/ConfigFileCreationPass.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package io.joern.rubysrc2cpg.passes
22

3+
import io.joern.rubysrc2cpg.Config
34
import io.joern.x2cpg.passes.frontend.XConfigFileCreationPass
45
import io.shiftleft.semanticcpg.utils.FileUtil.*
56
import io.shiftleft.codepropertygraph.generated.Cpg
67
import io.shiftleft.semanticcpg.language.*
78
import io.shiftleft.semanticcpg.utils.FileUtil
89

910
import java.nio.file.{Path, Paths}
10-
1111
import scala.util.Try
1212

1313
/** Creates the CONFIGURATION layer from any existing `Gemfile` or `Gemfile.lock` files found at root level.
1414
*/
15-
class ConfigFileCreationPass(cpg: Cpg) extends XConfigFileCreationPass(cpg) {
15+
class ConfigFileCreationPass(cpg: Cpg, config: Config) extends XConfigFileCreationPass(cpg, config = config) {
1616

1717
private val validGemfilePaths = Try(Paths.get(cpg.metaData.root.headOption.getOrElse(""))).toOption match {
1818
case Some(rootPath) => Seq("Gemfile", "Gemfile.lock").map(rootPath / _)

0 commit comments

Comments
 (0)