From 6465bfe34d44204032be2af201b01a0d761f8a8d Mon Sep 17 00:00:00 2001 From: Xavier Pinho Date: Thu, 7 Nov 2024 16:29:03 +0000 Subject: [PATCH] [javasrc2cpg] support flows for field accesses with a TYPE_REF base node (#5076) * [javasrc2cpg] support flows for field accesses with a TYPE_REF base node * scalafmt * simplify `.where(_.or...)` with `.or(...)` cf. review suggestion Co-authored-by: maltek <1694194+maltek@users.noreply.github.com> --------- Co-authored-by: maltek <1694194+maltek@users.noreply.github.com> --- .../queryengine/SourcesToStartingPoints.scala | 5 ++++- .../io/joern/javasrc2cpg/querying/dataflow/ObjectTests.scala | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/queryengine/SourcesToStartingPoints.scala b/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/queryengine/SourcesToStartingPoints.scala index c686271ea0f6..74b651ef428a 100644 --- a/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/queryengine/SourcesToStartingPoints.scala +++ b/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/queryengine/SourcesToStartingPoints.scala @@ -147,7 +147,10 @@ class SourceToStartingPointsInMethod( private def usageInOtherClasses(m: Method, usageInputs: List[UsageInput]): List[StartingPointWithSource] = { usageInputs.flatMap { case UsageInput(src, typeDecl, astNode) => m.fieldAccess - .where(_.argument(1).isIdentifier.typeFullNameExact(typeDecl.fullName)) + .or( + _.argument(1).isIdentifier.typeFullNameExact(typeDecl.fullName), + _.argument(1).isTypeRef.typeFullNameExact(typeDecl.fullName) + ) .where { x => astNode match { case identifier: Identifier => diff --git a/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/querying/dataflow/ObjectTests.scala b/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/querying/dataflow/ObjectTests.scala index d3e2549b49b5..cd26a4015e0b 100644 --- a/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/querying/dataflow/ObjectTests.scala +++ b/joern-cli/frontends/javasrc2cpg/src/test/scala/io/joern/javasrc2cpg/querying/dataflow/ObjectTests.scala @@ -6,8 +6,7 @@ import io.shiftleft.semanticcpg.language.* class NewObjectTests extends JavaSrcCode2CpgFixture(withOssDataflow = true) { - // FIXME: stopped working after https://github.com/joernio/joern/pull/5036 - "static field passed as an argument inside a same-class static method whilst being referenced by its simple name" ignore { + "static field passed as an argument inside a same-class static method whilst being referenced by its simple name" in { val cpg = code(""" |class Bar { | static String CONST = ""; @@ -18,7 +17,7 @@ class NewObjectTests extends JavaSrcCode2CpgFixture(withOssDataflow = true) { val sink = cpg.call("println").argument(1) val source = cpg.literal sink.reachableByFlows(source).map(flowToResultPairs).l shouldBe List( - List(("String Bar.CONST = \"\"", Some(3)), ("System.out.println(Bar.CONST)", Some(5))) + List(("String Bar.CONST = \"\"", Some(3)), ("System.out.println(CONST)", Some(5))) ) }