Skip to content

Commit ed68423

Browse files
committed
Rust: Handle captured self parameter in variable implementation
1 parent 43dd3eb commit ed68423

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ module Impl {
139139
*/
140140
IdentPat getPat() { variableDecl(definingNode, result, name) }
141141

142+
/** Gets the enclosing CFG scope for this variable declaration. */
143+
CfgScope getEnclosingCfgScope() { result = definingNode.getEnclosingCfgScope() }
144+
142145
/** Gets the `let` statement that introduces this variable, if any. */
143146
LetStmt getLetStmt() { this.getPat() = result.getPat() }
144147

@@ -452,7 +455,7 @@ module Impl {
452455
Variable getVariable() { result = v }
453456

454457
/** Holds if this access is a capture. */
455-
predicate isCapture() { this.getEnclosingCfgScope() != v.getPat().getEnclosingCfgScope() }
458+
predicate isCapture() { this.getEnclosingCfgScope() != v.getEnclosingCfgScope() }
456459

457460
override string toString() { result = name }
458461

rust/ql/test/library-tests/variables/Ssa.expected

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ definition
136136
| variables.rs:462:9:462:9 | x | variables.rs:462:9:462:9 | x |
137137
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self |
138138
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self |
139+
| variables.rs:490:18:490:26 | SelfParam | variables.rs:490:23:490:26 | self |
139140
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f |
141+
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self |
140142
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n |
141143
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a |
142144
| variables.rs:514:5:514:5 | a | variables.rs:510:13:510:13 | a |
@@ -268,6 +270,7 @@ read
268270
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
269271
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:495:9:495:9 | f |
270272
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:496:9:496:9 | f |
273+
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self | variables.rs:493:13:493:16 | self |
271274
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n | variables.rs:493:25:493:25 | n |
272275
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:511:15:511:15 | a |
273276
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:512:5:512:5 | a |
@@ -376,6 +379,7 @@ firstRead
376379
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
377380
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
378381
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:495:9:495:9 | f |
382+
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self | variables.rs:493:13:493:16 | self |
379383
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n | variables.rs:493:25:493:25 | n |
380384
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:511:15:511:15 | a |
381385
| variables.rs:514:5:514:5 | a | variables.rs:510:13:510:13 | a | variables.rs:515:15:515:15 | a |
@@ -483,6 +487,7 @@ lastRead
483487
| variables.rs:482:15:482:23 | SelfParam | variables.rs:482:20:482:23 | self | variables.rs:483:16:483:19 | self |
484488
| variables.rs:486:11:486:14 | SelfParam | variables.rs:486:11:486:14 | self | variables.rs:487:9:487:12 | self |
485489
| variables.rs:491:13:491:17 | f | variables.rs:491:17:491:17 | f | variables.rs:496:9:496:9 | f |
490+
| variables.rs:491:21:494:9 | <captured entry> self | variables.rs:490:23:490:26 | self | variables.rs:493:13:493:16 | self |
486491
| variables.rs:491:22:491:22 | n | variables.rs:491:22:491:22 | n | variables.rs:493:25:493:25 | n |
487492
| variables.rs:510:9:510:13 | a | variables.rs:510:13:510:13 | a | variables.rs:513:15:513:15 | a |
488493
| variables.rs:514:5:514:5 | a | variables.rs:510:13:510:13 | a | variables.rs:515:15:515:15 | a |

rust/ql/test/library-tests/variables/variables.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,9 +496,11 @@ capturedVariable
496496
| variables.rs:418:13:418:13 | y |
497497
| variables.rs:426:13:426:13 | z |
498498
| variables.rs:436:13:436:13 | i |
499+
| variables.rs:490:23:490:26 | self |
499500
capturedAccess
500501
| variables.rs:403:19:403:19 | x |
501502
| variables.rs:413:19:413:19 | x |
502503
| variables.rs:421:9:421:9 | y |
503504
| variables.rs:429:9:429:9 | z |
504505
| variables.rs:438:9:438:9 | i |
506+
| variables.rs:493:13:493:16 | self |

0 commit comments

Comments
 (0)