Skip to content

Commit 432ec1c

Browse files
authored
Bug fix for access path handling (#1001)
1 parent 3f9e515 commit 432ec1c

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

dataflowengineoss/src/main/scala/io/shiftleft/dataflowengineoss/passes/reachingdef/UsageAnalyzer.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.shiftleft.dataflowengineoss.passes.reachingdef
22

33
import io.shiftleft.codepropertygraph.generated.nodes
44
import io.shiftleft.codepropertygraph.generated.nodes.StoredNode
5-
import io.shiftleft.semanticcpg.accesspath.{MatchResult}
5+
import io.shiftleft.semanticcpg.accesspath.MatchResult
66
import io.shiftleft.semanticcpg.language.nodemethods.TrackingPointMethodsBase.ImplicitsAPI
77
import io.shiftleft.semanticcpg.language._
88
import overflowdb.traversal._
@@ -32,7 +32,7 @@ class UsageAnalyzer(in: Map[nodes.StoredNode, Set[Definition]]) {
3232
val (matchResult, elements) = useAccessPath.matchAndDiff(defAccessPath.elements)
3333
(useBase == inBase) && // filter *x -> x
3434
!(matchResult == MatchResult.EXTENDED_MATCH && elements.elements.length > 1 && elements.elements.headOption
35-
.exists(_.toString == "*"))
35+
.exists(_.toString == "*")) && matchResult != MatchResult.NO_MATCH
3636
case _ => false
3737
}
3838
}

dataflowengineoss/src/test/scala/io/shiftleft/dataflowengineoss/language/CDataFlowTests.scala

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.shiftleft.dataflowengineoss.language
22

3+
import io.shiftleft.dataflowengineoss.semanticsloader.Semantics
34
import io.shiftleft.semanticcpg.language._
5+
import overflowdb.traversal.Traversal
46

57
class CDataFlowTests1 extends DataFlowCodeToCpgSuite {
68

@@ -801,3 +803,29 @@ class CDataFlowTests23 extends DataFlowCodeToCpgSuite {
801803
}
802804

803805
}
806+
807+
class CDataFlowTests24 extends DataFlowCodeToCpgSuite {
808+
override val code =
809+
"""
810+
|int foo() {
811+
| source(&a->c);
812+
| sink(a->b);
813+
|}
814+
|
815+
|int bar() {
816+
| source(&a->b);
817+
| sink(a->b);
818+
|}
819+
|
820+
|""".stripMargin
821+
822+
"Test 24: should not report flow if access path differs" in {
823+
val source = cpg.call.name("source").argument.l
824+
val sink = cpg.method.name("sink").parameter.l
825+
implicit val s: Semantics = semantics
826+
val flows = sink.to(Traversal).reachableByFlows(source.to(Traversal)).l
827+
flows.map(flowToResultPairs).toSet shouldBe Set(
828+
List(("source(&a->b)", Some(8)), ("sink(a->b)", Some(9)), ("sink(p1)", None)))
829+
}
830+
831+
}

0 commit comments

Comments
 (0)