Skip to content

Commit 47e8a22

Browse files
committed
More CG tweaks
1 parent 2d1f2db commit 47e8a22

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

javascript/ql/lib/semmle/javascript/dataflow/internal/CallGraphs.qll

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,29 @@ module CallGraph {
1818
}
1919

2020
pragma[nomagic]
21-
private DataFlow::SourceNode backtrackStoreTarget() {
22-
shouldBackTrack(result)
21+
private predicate methodHostToReceiverStep(DataFlow::SourceNode node1, DataFlow::SourceNode node2) {
22+
exists(DataFlow::PropWrite write |
23+
node1 = write.getBase().getALocalSource() and
24+
node2 = write.getRhs().getALocalSource().(DataFlow::FunctionNode).getReceiver()
25+
)
26+
}
27+
28+
pragma[inline]
29+
private predicate step(DataFlow::SourceNode node1, DataFlow::SourceNode node2) {
30+
AccessPath::step(node1.getALocalUse(), node2)
2331
or
24-
AccessPath::step(result.getALocalUse(), backtrackStoreTarget())
32+
propertyFlowStep(node1.getALocalUse(), node2)
2533
or
26-
propertyFlowStep(result.getALocalUse(), backtrackStoreTarget())
34+
storeReadStep(node1, node2)
2735
or
28-
storeReadStep(result, backtrackStoreTarget())
36+
methodHostToReceiverStep(node1, node2)
37+
}
38+
39+
pragma[nomagic]
40+
private DataFlow::SourceNode backtrackStoreTarget() {
41+
shouldBackTrack(result)
42+
or
43+
step(result, backtrackStoreTarget())
2944
}
3045

3146
pragma[nomagic]
@@ -63,15 +78,9 @@ module CallGraph {
6378
pragma[nomagic]
6479
private DataFlow::SourceNode track(DataFlow::SourceNode source) {
6580
shouldTrack(source) and
66-
(
67-
result = source
68-
or
69-
AccessPath::step(track(source).getALocalUse(), result)
70-
or
71-
propertyFlowStep(track(source).getALocalUse(), result)
72-
or
73-
storeReadStep(track(source), result)
74-
)
81+
result = source
82+
or
83+
step(track(source), result)
7584
}
7685

7786
/** Gets the function referenced by `node`, as determined by the type inference. */

0 commit comments

Comments
 (0)