diff --git a/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/passes/reachingdef/DdgGenerator.scala b/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/passes/reachingdef/DdgGenerator.scala index 33a492979daf..7d3d21c6ef0f 100644 --- a/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/passes/reachingdef/DdgGenerator.scala +++ b/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/passes/reachingdef/DdgGenerator.scala @@ -332,7 +332,9 @@ private class UsageAnalyzer(problem: DataFlowProblem[CfgNode, mutable.BitSet], i def uses(node: CfgNode): Set[CfgNode] = { val n: Set[CfgNode] = node match { case ret: Return => ret.astChildren.collect { case x: Expression => x }.toSet - case call: Call => call.argument.toSet + case call: Call => + val parameterReceivers = call.receiver.collectAll[Identifier].filter(_.refsTo.collectAll[MethodParameterIn].nonEmpty) + (call.argument ++ parameterReceivers).toSet case paramOut: MethodParameterOut => Set(paramOut) case _ => Set() } 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 17e5c6e58255..d81bbf98c3db 100644 --- a/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/queryengine/SourcesToStartingPoints.scala +++ b/dataflowengineoss/src/main/scala/io/joern/dataflowengineoss/queryengine/SourcesToStartingPoints.scala @@ -208,14 +208,16 @@ abstract class BaseSourceToStartingPoints extends Callable[Unit] { case x: Identifier => val fieldAndIndexAccesses = withFieldAndIndexAccesses(x :: Nil) val capturedReferences = x.refsTo.capturedByMethodRef.referencedMethod.flatMap(firstUsagesForName(x.name, _)).l + val capturingClosures = x.refsTo.capturedByMethodRef.l ( - (x :: fieldAndIndexAccesses ++ capturedReferences) flatMap { + (x :: fieldAndIndexAccesses ++ capturedReferences ++ capturingClosures) flatMap { case x: Call => handleCallNode(x) // Handle the case if this is an arg to another call case x => x :: Nil }, Nil ) + case x: MethodParameterIn => (x :: Nil, Nil) case x: Call => (handleCallNode(x), Nil) case x: CfgNode => (x :: Nil, Nil) case _ => (Nil, Nil)