Skip to content

Commit 435a4df

Browse files
committed
wip
1 parent 8b53bfe commit 435a4df

File tree

5 files changed

+13
-3
lines changed

5 files changed

+13
-3
lines changed

rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,11 @@ module LocalFlow {
277277
nodeTo.(Node::SsaNode).getDefinitionExt().(Ssa::WriteDefinition).getControlFlowNode()
278278
or
279279
SsaFlow::localFlowStep(_, nodeFrom, nodeTo, _)
280+
or
281+
exists(AssignmentExprCfgNode a |
282+
a.getRhs() = nodeFrom.getCfgNode() and
283+
a.getLhs() = nodeTo.getCfgNode()
284+
)
280285
}
281286
}
282287

rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,14 +474,14 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
474474

475475
/** Holds if SSA definition `def` assigns `value` to the underlying variable. */
476476
predicate ssaDefAssigns(WriteDefinition def, Expr value) {
477-
exists(BasicBlock bb, int i | def.definesAt(_, bb, i) and value = bb.getNode(i))
477+
none() // handled in `DataFlowImpl.qll` instead
478478
}
479479

480480
class Parameter = CfgNodes::ParamCfgNode;
481481

482482
/** Holds if SSA definition `def` initializes parameter `p` at function entry. */
483483
predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) {
484-
exists(BasicBlock bb, int i | bb.getNode(i) = p and def.definesAt(_, bb, i))
484+
none() // handled in `DataFlowImpl.qll` instead
485485
}
486486

487487
class Guard extends CfgNodes::AstCfgNode {

rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
| main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i |
4747
| main.rs:53:5:53:5 | [SSA] i | main.rs:54:10:54:10 | i |
4848
| main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i |
49+
| main.rs:53:9:53:17 | CallExpr | main.rs:53:5:53:5 | i |
4950
| main.rs:61:9:61:9 | [SSA] i | main.rs:62:11:62:11 | i |
5051
| main.rs:61:9:61:9 | i | main.rs:61:9:61:9 | [SSA] i |
5152
| main.rs:61:13:61:31 | CallExpr | main.rs:61:9:61:9 | i |

rust/ql/test/library-tests/dataflow/local/inline-flow.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ edges
44
| main.rs:24:13:24:21 | CallExpr : unit | main.rs:27:10:27:10 | c | provenance | |
55
| main.rs:31:13:31:21 | CallExpr : unit | main.rs:36:10:36:10 | b | provenance | |
66
| main.rs:45:15:45:23 | CallExpr : unit | main.rs:47:10:47:10 | b | provenance | |
7+
| main.rs:53:9:53:17 | CallExpr : unit | main.rs:54:10:54:10 | i | provenance | |
78
nodes
89
| main.rs:15:10:15:18 | CallExpr | semmle.label | CallExpr |
910
| main.rs:19:13:19:21 | CallExpr : unit | semmle.label | CallExpr : unit |
@@ -14,6 +15,8 @@ nodes
1415
| main.rs:36:10:36:10 | b | semmle.label | b |
1516
| main.rs:45:15:45:23 | CallExpr : unit | semmle.label | CallExpr : unit |
1617
| main.rs:47:10:47:10 | b | semmle.label | b |
18+
| main.rs:53:9:53:17 | CallExpr : unit | semmle.label | CallExpr : unit |
19+
| main.rs:54:10:54:10 | i | semmle.label | i |
1720
subpaths
1821
testFailures
1922
#select
@@ -22,3 +25,4 @@ testFailures
2225
| main.rs:27:10:27:10 | c | main.rs:24:13:24:21 | CallExpr : unit | main.rs:27:10:27:10 | c | $@ | main.rs:24:13:24:21 | CallExpr : unit | CallExpr : unit |
2326
| main.rs:36:10:36:10 | b | main.rs:31:13:31:21 | CallExpr : unit | main.rs:36:10:36:10 | b | $@ | main.rs:31:13:31:21 | CallExpr : unit | CallExpr : unit |
2427
| main.rs:47:10:47:10 | b | main.rs:45:15:45:23 | CallExpr : unit | main.rs:47:10:47:10 | b | $@ | main.rs:45:15:45:23 | CallExpr : unit | CallExpr : unit |
28+
| main.rs:54:10:54:10 | i | main.rs:53:9:53:17 | CallExpr : unit | main.rs:54:10:54:10 | i | $@ | main.rs:53:9:53:17 | CallExpr : unit | CallExpr : unit |

rust/ql/test/library-tests/dataflow/local/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ fn assignment() {
5151
let mut i = 1;
5252
sink(i);
5353
i = source(2);
54-
sink(i); // $ MISSING: hasValueFlow=2
54+
sink(i); // $ hasValueFlow=2
5555
}
5656

5757
// -----------------------------------------------------------------------------

0 commit comments

Comments
 (0)