Skip to content

Commit 7ec9b26

Browse files
committed
wip2
1 parent cea8d5f commit 7ec9b26

File tree

5 files changed

+88
-54
lines changed

5 files changed

+88
-54
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ private module Input implements InputSig<Location, RustDataFlow> {
1919
predicate postWithInFlowExclude(RustDataFlow::Node n) {
2020
n instanceof Node::FlowSummaryNode
2121
or
22+
// We allow flow into post-update node for receiver expressions (from the
23+
// synthetic post receiever node).
24+
n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = any(Node::DerefBorrowNode r).getNode()
25+
or
26+
n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = any(Node::DerefOutNode r).getDerefExpr()
27+
or
2228
n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(_, _)
2329
or
2430
FlowSummaryImpl::Private::Steps::sourceLocalStep(_, n, _)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,12 @@ module LocalFlow {
275275
or
276276
nodeFrom.asPat().(OrPat).getAPat() = nodeTo.asPat()
277277
or
278+
nodeFrom.(PostUpdateNode).getPreUpdateNode().(DerefBorrowNode).getNode() =
279+
nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr()
280+
or
281+
nodeFrom.(PostUpdateNode).getPreUpdateNode().(DerefOutNode).getDerefExpr() =
282+
nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr()
283+
or
278284
nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr() =
279285
getPostUpdateReverseStep(nodeFrom.(PostUpdateNode).getPreUpdateNode().asExpr(), true)
280286
}

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

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ localStep
156156
| main.rs:115:9:115:9 | i | main.rs:115:9:115:9 | [SSA] i |
157157
| main.rs:115:9:115:9 | i | main.rs:115:9:115:9 | i |
158158
| main.rs:115:13:115:31 | ...::new(...) | main.rs:115:9:115:9 | i |
159+
| main.rs:116:10:116:11 | [post] * ... [pre-dereferenced] | main.rs:116:10:116:11 | [post] * ... |
160+
| main.rs:116:11:116:11 | [post] i [borrowed] | main.rs:116:11:116:11 | [post] i |
159161
| main.rs:123:9:123:9 | [SSA] a | main.rs:124:10:124:10 | a |
160162
| main.rs:123:9:123:9 | a | main.rs:123:9:123:9 | [SSA] a |
161163
| main.rs:123:9:123:9 | a | main.rs:123:9:123:9 | a |
@@ -599,6 +601,7 @@ localStep
599601
| main.rs:431:9:431:10 | [SSA] n1 | main.rs:432:10:432:11 | n1 |
600602
| main.rs:431:9:431:10 | n1 | main.rs:431:9:431:10 | [SSA] n1 |
601603
| main.rs:431:9:431:10 | n1 | main.rs:431:9:431:10 | n1 |
604+
| main.rs:431:14:431:17 | [post] arr1 [borrowed] | main.rs:431:14:431:17 | [post] arr1 |
602605
| main.rs:431:14:431:20 | arr1[2] | main.rs:431:9:431:10 | n1 |
603606
| main.rs:434:9:434:12 | [SSA] arr2 | main.rs:435:14:435:17 | arr2 |
604607
| main.rs:434:9:434:12 | arr2 | main.rs:434:9:434:12 | [SSA] arr2 |
@@ -607,6 +610,7 @@ localStep
607610
| main.rs:435:9:435:10 | [SSA] n2 | main.rs:436:10:436:11 | n2 |
608611
| main.rs:435:9:435:10 | n2 | main.rs:435:9:435:10 | [SSA] n2 |
609612
| main.rs:435:9:435:10 | n2 | main.rs:435:9:435:10 | n2 |
613+
| main.rs:435:14:435:17 | [post] arr2 [borrowed] | main.rs:435:14:435:17 | [post] arr2 |
610614
| main.rs:435:14:435:20 | arr2[4] | main.rs:435:9:435:10 | n2 |
611615
| main.rs:438:9:438:12 | [SSA] arr3 | main.rs:439:14:439:17 | arr3 |
612616
| main.rs:438:9:438:12 | arr3 | main.rs:438:9:438:12 | [SSA] arr3 |
@@ -615,6 +619,7 @@ localStep
615619
| main.rs:439:9:439:10 | [SSA] n3 | main.rs:440:10:440:11 | n3 |
616620
| main.rs:439:9:439:10 | n3 | main.rs:439:9:439:10 | [SSA] n3 |
617621
| main.rs:439:9:439:10 | n3 | main.rs:439:9:439:10 | n3 |
622+
| main.rs:439:14:439:17 | [post] arr3 [borrowed] | main.rs:439:14:439:17 | [post] arr3 |
618623
| main.rs:439:14:439:20 | arr3[2] | main.rs:439:9:439:10 | n3 |
619624
| main.rs:444:9:444:12 | [SSA] arr1 | main.rs:445:15:445:18 | arr1 |
620625
| main.rs:444:9:444:12 | arr1 | main.rs:444:9:444:12 | [SSA] arr1 |
@@ -652,22 +657,27 @@ localStep
652657
| main.rs:467:13:467:19 | mut_arr | main.rs:467:13:467:19 | [SSA] mut_arr |
653658
| main.rs:467:23:467:31 | [...] | main.rs:467:9:467:19 | mut mut_arr |
654659
| main.rs:468:10:468:16 | [post] mut_arr | main.rs:470:5:470:11 | mut_arr |
660+
| main.rs:468:10:468:16 | [post] mut_arr [borrowed] | main.rs:468:10:468:16 | [post] mut_arr |
655661
| main.rs:468:10:468:16 | mut_arr | main.rs:470:5:470:11 | mut_arr |
656662
| main.rs:470:5:470:11 | [post] mut_arr | main.rs:471:13:471:19 | mut_arr |
663+
| main.rs:470:5:470:11 | [post] mut_arr [borrowed] | main.rs:470:5:470:11 | [post] mut_arr |
657664
| main.rs:470:5:470:11 | mut_arr | main.rs:471:13:471:19 | mut_arr |
658665
| main.rs:470:18:470:27 | source(...) | main.rs:470:5:470:14 | mut_arr[1] |
659666
| main.rs:471:9:471:9 | [SSA] d | main.rs:472:10:472:10 | d |
660667
| main.rs:471:9:471:9 | d | main.rs:471:9:471:9 | [SSA] d |
661668
| main.rs:471:9:471:9 | d | main.rs:471:9:471:9 | d |
662669
| main.rs:471:13:471:19 | [post] mut_arr | main.rs:473:10:473:16 | mut_arr |
670+
| main.rs:471:13:471:19 | [post] mut_arr [borrowed] | main.rs:471:13:471:19 | [post] mut_arr |
663671
| main.rs:471:13:471:19 | mut_arr | main.rs:473:10:473:16 | mut_arr |
664672
| main.rs:471:13:471:22 | mut_arr[1] | main.rs:471:9:471:9 | d |
673+
| main.rs:473:10:473:16 | [post] mut_arr [borrowed] | main.rs:473:10:473:16 | [post] mut_arr |
665674
| main.rs:478:39:478:43 | [SSA] names | main.rs:480:25:480:29 | names |
666675
| main.rs:478:39:478:43 | names | main.rs:478:39:478:43 | [SSA] names |
667676
| main.rs:478:39:478:43 | names | main.rs:478:39:478:43 | names |
668677
| main.rs:478:39:478:72 | ...: Vec::<...> | main.rs:478:39:478:43 | names |
669678
| main.rs:479:9:479:20 | default_name | main.rs:479:9:479:20 | [SSA] default_name |
670679
| main.rs:479:9:479:20 | default_name | main.rs:479:9:479:20 | default_name |
680+
| main.rs:479:24:479:33 | [post] source(...) [borrowed] | main.rs:479:24:479:33 | [post] source(...) |
671681
| main.rs:479:24:479:45 | ... .to_string() | main.rs:479:9:479:20 | default_name |
672682
| main.rs:479:24:479:45 | ... .to_string() | main.rs:480:9:480:20 | SSA phi read(default_name) |
673683
| main.rs:480:5:486:5 | for ... in ... { ... } | main.rs:478:75:487:1 | { ... } |
@@ -687,6 +697,8 @@ localStep
687697
| main.rs:482:41:482:67 | [post] default_name | main.rs:480:9:480:20 | SSA phi read(default_name) |
688698
| main.rs:482:41:482:67 | closure self in \|...\| ... | main.rs:482:44:482:55 | this |
689699
| main.rs:482:41:482:67 | default_name | main.rs:480:9:480:20 | SSA phi read(default_name) |
700+
| main.rs:482:44:482:55 | [post] default_name [borrowed] | main.rs:482:44:482:55 | [post] default_name |
701+
| main.rs:483:18:483:18 | [post] n [borrowed] | main.rs:483:18:483:18 | [post] n |
690702
| main.rs:496:9:496:9 | [SSA] s | main.rs:497:10:497:10 | s |
691703
| main.rs:496:9:496:9 | s | main.rs:496:9:496:9 | [SSA] s |
692704
| main.rs:496:9:496:9 | s | main.rs:496:9:496:9 | s |
@@ -708,6 +720,7 @@ localStep
708720
| main.rs:506:9:506:9 | b | main.rs:506:9:506:9 | [SSA] b |
709721
| main.rs:506:9:506:9 | b | main.rs:506:9:506:9 | b |
710722
| main.rs:506:13:506:13 | [post] a | main.rs:510:10:510:10 | a |
723+
| main.rs:506:13:506:13 | [post] a [borrowed] | main.rs:506:13:506:13 | [post] a |
711724
| main.rs:506:13:506:13 | a | main.rs:510:10:510:10 | a |
712725
| main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b |
713726
| main.rs:507:9:507:9 | [SSA] c | main.rs:512:10:512:10 | c |
@@ -727,11 +740,16 @@ localStep
727740
| main.rs:517:9:517:10 | vs | main.rs:517:9:517:10 | vs |
728741
| main.rs:517:14:517:34 | [...] | main.rs:517:9:517:10 | vs |
729742
| main.rs:519:10:519:11 | [post] vs | main.rs:520:11:520:12 | vs |
743+
| main.rs:519:10:519:11 | [post] vs [borrowed] | main.rs:519:10:519:11 | [post] vs |
730744
| main.rs:519:10:519:11 | vs | main.rs:520:11:520:12 | vs |
745+
| main.rs:520:10:520:35 | [post] * ... [pre-dereferenced] | main.rs:520:10:520:35 | [post] * ... |
731746
| main.rs:520:11:520:12 | [post] vs | main.rs:521:11:521:12 | vs |
732747
| main.rs:520:11:520:12 | vs | main.rs:521:11:521:12 | vs |
748+
| main.rs:520:11:520:35 | [post] ... .unwrap() [borrowed] | main.rs:520:11:520:35 | [post] ... .unwrap() |
749+
| main.rs:521:10:521:35 | [post] * ... [pre-dereferenced] | main.rs:521:10:521:35 | [post] * ... |
733750
| main.rs:521:11:521:12 | [post] vs | main.rs:523:14:523:15 | vs |
734751
| main.rs:521:11:521:12 | vs | main.rs:523:14:523:15 | vs |
752+
| main.rs:521:11:521:35 | [post] ... .unwrap() [borrowed] | main.rs:521:11:521:35 | [post] ... .unwrap() |
735753
| main.rs:523:9:523:9 | [SSA] v | main.rs:524:14:524:14 | v |
736754
| main.rs:523:9:523:9 | v | main.rs:523:9:523:9 | [SSA] v |
737755
| main.rs:523:9:523:9 | v | main.rs:523:9:523:9 | v |
@@ -756,12 +774,16 @@ localStep
756774
| main.rs:535:20:535:20 | [SSA] x | main.rs:535:29:535:29 | x |
757775
| main.rs:535:20:535:20 | x | main.rs:535:20:535:20 | [SSA] x |
758776
| main.rs:535:20:535:20 | x | main.rs:535:20:535:20 | x |
777+
| main.rs:535:28:535:29 | [post] * ... [pre-dereferenced] | main.rs:535:28:535:29 | [post] * ... |
778+
| main.rs:535:29:535:29 | [post] x [borrowed] | main.rs:535:29:535:29 | [post] x |
759779
| main.rs:536:5:536:6 | [post] vs | main.rs:538:14:538:15 | vs |
760780
| main.rs:536:5:536:6 | vs | main.rs:538:14:538:15 | vs |
761781
| main.rs:536:25:536:25 | ... | main.rs:536:25:536:25 | x |
762782
| main.rs:536:25:536:25 | [SSA] x | main.rs:536:34:536:34 | x |
763783
| main.rs:536:25:536:25 | x | main.rs:536:25:536:25 | [SSA] x |
764784
| main.rs:536:25:536:25 | x | main.rs:536:25:536:25 | x |
785+
| main.rs:536:33:536:34 | [post] * ... [pre-dereferenced] | main.rs:536:33:536:34 | [post] * ... |
786+
| main.rs:536:34:536:34 | [post] x [borrowed] | main.rs:536:34:536:34 | [post] x |
765787
| main.rs:538:9:538:9 | [SSA] v | main.rs:539:14:539:14 | v |
766788
| main.rs:538:9:538:9 | v | main.rs:538:9:538:9 | [SSA] v |
767789
| main.rs:538:9:538:9 | v | main.rs:538:9:538:9 | v |
@@ -771,17 +793,22 @@ localStep
771793
| main.rs:542:22:542:42 | [...] | main.rs:542:9:542:18 | mut vs_mut |
772794
| main.rs:544:10:544:15 | [post] vs_mut | main.rs:545:11:545:16 | [SSA] vs_mut |
773795
| main.rs:544:10:544:15 | [post] vs_mut | main.rs:545:11:545:16 | vs_mut |
796+
| main.rs:544:10:544:15 | [post] vs_mut [borrowed] | main.rs:544:10:544:15 | [post] vs_mut |
774797
| main.rs:544:10:544:15 | vs_mut | main.rs:545:11:545:16 | [SSA] vs_mut |
775798
| main.rs:544:10:544:15 | vs_mut | main.rs:545:11:545:16 | vs_mut |
799+
| main.rs:545:10:545:39 | [post] * ... [pre-dereferenced] | main.rs:545:10:545:39 | [post] * ... |
776800
| main.rs:545:11:545:16 | [SSA] vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut |
777801
| main.rs:545:11:545:16 | [SSA] vs_mut | main.rs:546:11:546:16 | vs_mut |
778802
| main.rs:545:11:545:16 | [post] vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut |
779803
| main.rs:545:11:545:16 | [post] vs_mut | main.rs:546:11:546:16 | vs_mut |
780804
| main.rs:545:11:545:16 | vs_mut | main.rs:546:11:546:16 | [SSA] vs_mut |
781805
| main.rs:545:11:545:16 | vs_mut | main.rs:546:11:546:16 | vs_mut |
806+
| main.rs:545:11:545:39 | [post] ... .unwrap() [borrowed] | main.rs:545:11:545:39 | [post] ... .unwrap() |
807+
| main.rs:546:10:546:39 | [post] * ... [pre-dereferenced] | main.rs:546:10:546:39 | [post] * ... |
782808
| main.rs:546:11:546:16 | [SSA] vs_mut | main.rs:548:19:548:24 | vs_mut |
783809
| main.rs:546:11:546:16 | [post] vs_mut | main.rs:548:19:548:24 | vs_mut |
784810
| main.rs:546:11:546:16 | vs_mut | main.rs:548:19:548:24 | vs_mut |
811+
| main.rs:546:11:546:39 | [post] ... .unwrap() [borrowed] | main.rs:546:11:546:39 | [post] ... .unwrap() |
785812
| main.rs:548:5:550:5 | for ... in ... { ... } | main.rs:516:16:551:1 | { ... } |
786813
| main.rs:548:14:548:14 | [SSA] v | main.rs:549:14:549:14 | v |
787814
| main.rs:548:14:548:14 | v | main.rs:548:14:548:14 | [SSA] v |
@@ -804,6 +831,8 @@ localStep
804831
| main.rs:557:17:557:18 | &c | main.rs:557:9:557:13 | c_ref |
805832
| main.rs:561:14:561:18 | [post] c_ref | main.rs:562:11:562:15 | c_ref |
806833
| main.rs:561:14:561:18 | c_ref | main.rs:562:11:562:15 | c_ref |
834+
| main.rs:562:10:562:15 | [post] * ... [pre-dereferenced] | main.rs:562:10:562:15 | [post] * ... |
835+
| main.rs:562:11:562:15 | [post] c_ref [borrowed] | main.rs:562:11:562:15 | [post] c_ref |
807836
| main.rs:566:9:566:9 | [SSA] a | main.rs:568:10:568:10 | a |
808837
| main.rs:566:9:566:9 | a | main.rs:566:9:566:9 | [SSA] a |
809838
| main.rs:566:9:566:9 | a | main.rs:566:9:566:9 | a |
@@ -825,8 +854,8 @@ localStep
825854
| main.rs:616:36:616:41 | [post] MacroExpr | main.rs:616:36:616:39 | [post] ...::new(...) |
826855
readStep
827856
| main.rs:50:9:50:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:50:14:50:14 | _ |
857+
| main.rs:116:10:116:11 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... |
828858
| main.rs:116:11:116:11 | [post] i [borrowed] | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | [post] i |
829-
| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... |
830859
| main.rs:124:10:124:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:124:10:124:12 | a.0 |
831860
| main.rs:125:10:125:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:125:10:125:12 | a.1 |
832861
| main.rs:130:9:130:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:130:10:130:11 | a0 |
@@ -934,30 +963,30 @@ readStep
934963
| main.rs:506:13:506:13 | [post] a [borrowed] | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | [post] a |
935964
| main.rs:519:10:519:11 | [post] vs [borrowed] | file://:0:0:0:0 | &ref | main.rs:519:10:519:11 | [post] vs |
936965
| main.rs:519:10:519:11 | vs | file://:0:0:0:0 | element | main.rs:519:10:519:14 | vs[0] |
937-
| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... |
966+
| main.rs:520:10:520:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... |
938967
| main.rs:520:11:520:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | [post] ... .unwrap() |
939-
| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... |
968+
| main.rs:521:10:521:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... |
940969
| main.rs:521:11:521:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | [post] ... .unwrap() |
941970
| main.rs:523:14:523:15 | vs | file://:0:0:0:0 | element | main.rs:523:9:523:9 | v |
942971
| main.rs:526:9:526:10 | &... | file://:0:0:0:0 | &ref | main.rs:526:10:526:10 | v |
943972
| main.rs:526:15:526:23 | vs.iter() | file://:0:0:0:0 | element | main.rs:526:9:526:10 | &... |
944973
| main.rs:531:9:531:10 | &... | file://:0:0:0:0 | &ref | main.rs:531:10:531:10 | v |
945974
| main.rs:531:15:531:17 | vs2 | file://:0:0:0:0 | element | main.rs:531:9:531:10 | &... |
975+
| main.rs:535:28:535:29 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... |
946976
| main.rs:535:29:535:29 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | [post] x |
947-
| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... |
977+
| main.rs:536:33:536:34 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... |
948978
| main.rs:536:34:536:34 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | [post] x |
949-
| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... |
950979
| main.rs:538:14:538:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:538:9:538:9 | v |
951980
| main.rs:544:10:544:15 | [post] vs_mut [borrowed] | file://:0:0:0:0 | &ref | main.rs:544:10:544:15 | [post] vs_mut |
952981
| main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | element | main.rs:544:10:544:18 | vs_mut[0] |
953-
| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... |
982+
| main.rs:545:10:545:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... |
954983
| main.rs:545:11:545:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | [post] ... .unwrap() |
955-
| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... |
984+
| main.rs:546:10:546:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... |
956985
| main.rs:546:11:546:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | [post] ... .unwrap() |
957986
| main.rs:548:9:548:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:548:14:548:14 | v |
958987
| main.rs:548:19:548:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:548:9:548:14 | &mut ... |
988+
| main.rs:562:10:562:15 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... |
959989
| main.rs:562:11:562:15 | [post] c_ref [borrowed] | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | [post] c_ref |
960-
| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... |
961990
storeStep
962991
| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | i [borrowed] |
963992
| main.rs:123:14:123:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:123:13:123:26 | TupleExpr |

0 commit comments

Comments
 (0)