Skip to content

Commit 8b5ffc4

Browse files
committed
FlowSummaryImpl: Model more source/sink steps as jump steps
1 parent 3ee0030 commit 8b5ffc4

2 files changed

Lines changed: 46 additions & 18 deletions

File tree

rust/ql/test/library-tests/dataflow/models/models.expected

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -265,18 +265,28 @@ edges
265265
| main.rs:281:9:281:37 | ...::C {...} [C] | main.rs:281:35:281:35 | i | provenance | |
266266
| main.rs:281:35:281:35 | i | main.rs:281:47:281:47 | i | provenance | |
267267
| main.rs:281:35:281:35 | i | main.rs:281:47:281:47 | i | provenance | |
268-
| main.rs:303:24:303:24 | a | main.rs:302:26:302:26 | a | provenance | Src:MaD:17 |
269-
| main.rs:303:24:303:24 | a | main.rs:302:26:302:26 | a | provenance | Src:MaD:17 |
270-
| main.rs:305:24:307:9 | \|...\| ... | main.rs:306:18:306:18 | a | provenance | Src:MaD:17 |
271-
| main.rs:305:24:307:9 | \|...\| ... | main.rs:306:18:306:18 | a | provenance | Src:MaD:17 |
272-
| main.rs:312:24:312:24 | f | main.rs:310:18:310:18 | a | provenance | Src:MaD:17 |
273-
| main.rs:312:24:312:24 | f | main.rs:310:18:310:18 | a | provenance | Src:MaD:17 |
274-
| main.rs:314:24:316:9 | \|...\| ... | main.rs:315:18:315:18 | a | provenance | Src:MaD:17 |
275-
| main.rs:314:24:316:9 | \|...\| ... | main.rs:315:18:315:18 | a | provenance | Src:MaD:17 |
268+
| main.rs:302:18:302:18 | ... | main.rs:302:26:302:26 | a | provenance | |
269+
| main.rs:302:18:302:18 | ... | main.rs:302:26:302:26 | a | provenance | |
270+
| main.rs:303:24:303:24 | a | main.rs:302:18:302:18 | ... | provenance | Src:MaD:17 |
271+
| main.rs:303:24:303:24 | a | main.rs:302:18:302:18 | ... | provenance | Src:MaD:17 |
272+
| main.rs:305:24:307:9 | \|...\| ... | main.rs:305:25:305:25 | ... | provenance | Src:MaD:17 |
273+
| main.rs:305:24:307:9 | \|...\| ... | main.rs:305:25:305:25 | ... | provenance | Src:MaD:17 |
274+
| main.rs:305:25:305:25 | ... | main.rs:306:18:306:18 | a | provenance | |
275+
| main.rs:305:25:305:25 | ... | main.rs:306:18:306:18 | a | provenance | |
276+
| main.rs:309:14:309:19 | ...: i64 | main.rs:310:18:310:18 | a | provenance | |
277+
| main.rs:309:14:309:19 | ...: i64 | main.rs:310:18:310:18 | a | provenance | |
278+
| main.rs:312:24:312:24 | f | main.rs:309:14:309:19 | ...: i64 | provenance | Src:MaD:17 |
279+
| main.rs:312:24:312:24 | f | main.rs:309:14:309:19 | ...: i64 | provenance | Src:MaD:17 |
280+
| main.rs:314:24:316:9 | \|...\| ... | main.rs:314:36:314:36 | ... | provenance | Src:MaD:17 |
281+
| main.rs:314:24:316:9 | \|...\| ... | main.rs:314:36:314:36 | ... | provenance | Src:MaD:17 |
282+
| main.rs:314:36:314:36 | ... | main.rs:315:18:315:18 | a | provenance | |
283+
| main.rs:314:36:314:36 | ... | main.rs:315:18:315:18 | a | provenance | |
276284
| main.rs:318:31:329:9 | \|...\| ... | main.rs:318:31:329:9 | \|...\| ... [E, Some] | provenance | Src:MaD:18 |
277285
| main.rs:318:31:329:9 | \|...\| ... | main.rs:318:31:329:9 | \|...\| ... [E, Some] | provenance | Src:MaD:18 |
278-
| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | |
279-
| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | |
286+
| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:318:32:318:32 | ... [E, Some] | provenance | |
287+
| main.rs:318:31:329:9 | \|...\| ... [E, Some] | main.rs:318:32:318:32 | ... [E, Some] | provenance | |
288+
| main.rs:318:32:318:32 | ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | |
289+
| main.rs:318:32:318:32 | ... [E, Some] | main.rs:319:19:319:19 | e [E, Some] | provenance | |
280290
| main.rs:319:19:319:19 | e [E, Some] | main.rs:322:17:322:45 | ...::E {...} [E, Some] | provenance | |
281291
| main.rs:319:19:319:19 | e [E, Some] | main.rs:322:17:322:45 | ...::E {...} [E, Some] | provenance | |
282292
| main.rs:322:17:322:45 | ...::E {...} [E, Some] | main.rs:322:43:322:43 | o [Some] | provenance | |
@@ -291,12 +301,14 @@ edges
291301
| main.rs:324:30:324:30 | i | main.rs:324:41:324:41 | i | provenance | |
292302
| main.rs:344:21:344:29 | source(...) | main.rs:345:19:345:19 | a | provenance | Sink:MaD:7 |
293303
| main.rs:344:21:344:29 | source(...) | main.rs:345:19:345:19 | a | provenance | Sink:MaD:7 |
304+
| main.rs:347:22:352:9 | { ... } [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | |
305+
| main.rs:347:22:352:9 | { ... } [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | |
294306
| main.rs:348:17:348:17 | s | main.rs:350:39:350:39 | s | provenance | |
295307
| main.rs:348:17:348:17 | s | main.rs:350:39:350:39 | s | provenance | |
296308
| main.rs:348:21:348:29 | source(...) | main.rs:348:17:348:17 | s | provenance | |
297309
| main.rs:348:21:348:29 | source(...) | main.rs:348:17:348:17 | s | provenance | |
298-
| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | |
299-
| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:353:26:353:26 | b [E, Some] | provenance | |
310+
| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:347:22:352:9 | { ... } [E, Some] | provenance | |
311+
| main.rs:349:13:351:13 | ...::E {...} [E, Some] | main.rs:347:22:352:9 | { ... } [E, Some] | provenance | |
300312
| main.rs:350:26:350:40 | ...::Some(...) [Some] | main.rs:349:13:351:13 | ...::E {...} [E, Some] | provenance | |
301313
| main.rs:350:26:350:40 | ...::Some(...) [Some] | main.rs:349:13:351:13 | ...::E {...} [E, Some] | provenance | |
302314
| main.rs:350:39:350:39 | s | main.rs:350:26:350:40 | ...::Some(...) [Some] | provenance | |
@@ -654,26 +666,36 @@ nodes
654666
| main.rs:281:35:281:35 | i | semmle.label | i |
655667
| main.rs:281:47:281:47 | i | semmle.label | i |
656668
| main.rs:281:47:281:47 | i | semmle.label | i |
669+
| main.rs:302:18:302:18 | ... | semmle.label | ... |
670+
| main.rs:302:18:302:18 | ... | semmle.label | ... |
657671
| main.rs:302:26:302:26 | a | semmle.label | a |
658672
| main.rs:302:26:302:26 | a | semmle.label | a |
659673
| main.rs:303:24:303:24 | a | semmle.label | a |
660674
| main.rs:303:24:303:24 | a | semmle.label | a |
661675
| main.rs:305:24:307:9 | \|...\| ... | semmle.label | \|...\| ... |
662676
| main.rs:305:24:307:9 | \|...\| ... | semmle.label | \|...\| ... |
677+
| main.rs:305:25:305:25 | ... | semmle.label | ... |
678+
| main.rs:305:25:305:25 | ... | semmle.label | ... |
663679
| main.rs:306:18:306:18 | a | semmle.label | a |
664680
| main.rs:306:18:306:18 | a | semmle.label | a |
681+
| main.rs:309:14:309:19 | ...: i64 | semmle.label | ...: i64 |
682+
| main.rs:309:14:309:19 | ...: i64 | semmle.label | ...: i64 |
665683
| main.rs:310:18:310:18 | a | semmle.label | a |
666684
| main.rs:310:18:310:18 | a | semmle.label | a |
667685
| main.rs:312:24:312:24 | f | semmle.label | f |
668686
| main.rs:312:24:312:24 | f | semmle.label | f |
669687
| main.rs:314:24:316:9 | \|...\| ... | semmle.label | \|...\| ... |
670688
| main.rs:314:24:316:9 | \|...\| ... | semmle.label | \|...\| ... |
689+
| main.rs:314:36:314:36 | ... | semmle.label | ... |
690+
| main.rs:314:36:314:36 | ... | semmle.label | ... |
671691
| main.rs:315:18:315:18 | a | semmle.label | a |
672692
| main.rs:315:18:315:18 | a | semmle.label | a |
673693
| main.rs:318:31:329:9 | \|...\| ... | semmle.label | \|...\| ... |
674694
| main.rs:318:31:329:9 | \|...\| ... | semmle.label | \|...\| ... |
675695
| main.rs:318:31:329:9 | \|...\| ... [E, Some] | semmle.label | \|...\| ... [E, Some] |
676696
| main.rs:318:31:329:9 | \|...\| ... [E, Some] | semmle.label | \|...\| ... [E, Some] |
697+
| main.rs:318:32:318:32 | ... [E, Some] | semmle.label | ... [E, Some] |
698+
| main.rs:318:32:318:32 | ... [E, Some] | semmle.label | ... [E, Some] |
677699
| main.rs:319:19:319:19 | e [E, Some] | semmle.label | e [E, Some] |
678700
| main.rs:319:19:319:19 | e [E, Some] | semmle.label | e [E, Some] |
679701
| main.rs:322:17:322:45 | ...::E {...} [E, Some] | semmle.label | ...::E {...} [E, Some] |
@@ -692,6 +714,8 @@ nodes
692714
| main.rs:344:21:344:29 | source(...) | semmle.label | source(...) |
693715
| main.rs:345:19:345:19 | a | semmle.label | a |
694716
| main.rs:345:19:345:19 | a | semmle.label | a |
717+
| main.rs:347:22:352:9 | { ... } [E, Some] | semmle.label | { ... } [E, Some] |
718+
| main.rs:347:22:352:9 | { ... } [E, Some] | semmle.label | { ... } [E, Some] |
695719
| main.rs:348:17:348:17 | s | semmle.label | s |
696720
| main.rs:348:17:348:17 | s | semmle.label | s |
697721
| main.rs:348:21:348:29 | source(...) | semmle.label | source(...) |

shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,20 +2260,24 @@ module Make<
22602260
/** Provides a compilation of flow summaries to atomic data-flow steps. */
22612261
module Steps<StepsInputSig StepsInput> {
22622262
private predicate sourceExitStep(SourceOutputNode nodeFrom, Node nodeTo, boolean local) {
2263-
exists(SummaryComponent sc, SourceSinkReportingElement e |
2264-
nodeFrom.isExit(_, sc, e, _) and
2263+
exists(SummaryComponent sc, SourceSinkReportingElement e, string model |
2264+
nodeFrom.isExit(_, sc, e, model) and
22652265
nodeTo = getSourceDataFlowNode(e, sc) and
2266-
if e.getEnclosingCallable() = getNodeEnclosingCallable(nodeTo)
2266+
if
2267+
e.getEnclosingCallable() = getNodeEnclosingCallable(nodeTo) and
2268+
(nodeFrom.isEntry(_, model) or summaryStoreStep(_, _, nodeFrom))
22672269
then local = true
22682270
else local = false
22692271
)
22702272
}
22712273

22722274
private predicate sinkEntryStep(Node nodeFrom, SinkInputNode nodeTo, boolean local) {
2273-
exists(SummaryComponent sc, SourceSinkReportingElement e |
2274-
nodeTo.isEntry(_, sc, e, _) and
2275+
exists(SummaryComponent sc, SourceSinkReportingElement e, string model |
2276+
nodeTo.isEntry(_, sc, e, model) and
22752277
nodeFrom = getSinkDataFlowNode(e, sc) and
2276-
if e.getEnclosingCallable() = getNodeEnclosingCallable(nodeFrom)
2278+
if
2279+
e.getEnclosingCallable() = getNodeEnclosingCallable(nodeFrom) and
2280+
(nodeTo.isExit(_, model) or summaryReadStep(nodeTo, _, _))
22772281
then local = true
22782282
else local = false
22792283
)

0 commit comments

Comments
 (0)