Skip to content

Commit ae9588e

Browse files
committed
Rust: Improve TuplePositionContent.getAnAccess
1 parent 19179d5 commit ae9588e

File tree

3 files changed

+2
-49
lines changed

3 files changed

+2
-49
lines changed

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class TupleFieldContent extends FieldContent, TTupleFieldContent {
3131

3232
TupleFieldContent() {
3333
this = TTupleFieldContent(field) and
34-
// tuples are handled using the special `TupleContent` type
34+
// tuples are handled using the special `TuplePositionContent` type
3535
not field = any(TupleType tt).getATupleField()
3636
}
3737

@@ -153,10 +153,7 @@ final class TuplePositionContent extends FieldContent, TTuplePositionContent {
153153
/** Gets the index of this tuple position. */
154154
int getPosition() { result = pos }
155155

156-
override FieldExpr getAnAccess() {
157-
// TODO: limit to tuple types
158-
result.getIdentifier().getText().toInt() = pos
159-
}
156+
override FieldExpr getAnAccess() { result.getTupleField() = any(TupleType tt).getTupleField(pos) }
160157

161158
override string toString() { result = "tuple." + pos.toString() }
162159

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

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ edges
3838
| main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | provenance | |
3939
| main.rs:76:34:76:44 | ...: Self [S] | main.rs:77:23:77:27 | other [S] | provenance | |
4040
| main.rs:77:13:77:16 | [post] self [&ref, S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | provenance | |
41-
| main.rs:77:13:77:16 | [post] self [&ref, tuple.0] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | provenance | |
4241
| main.rs:77:13:77:18 | [post] self.0 | main.rs:77:13:77:16 | [post] self [&ref, S] | provenance | |
43-
| main.rs:77:13:77:18 | [post] self.0 | main.rs:77:13:77:16 | [post] self [&ref, tuple.0] | provenance | |
4442
| main.rs:77:23:77:27 | other [S] | main.rs:77:23:77:29 | other.0 | provenance | |
4543
| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:2 |
4644
| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:3 |
@@ -67,55 +65,34 @@ edges
6765
| main.rs:94:29:94:37 | source(...) | main.rs:94:27:94:38 | S(...) [S] | provenance | |
6866
| main.rs:95:14:95:14 | s [S] | main.rs:95:14:95:16 | s.0 | provenance | |
6967
| main.rs:99:9:99:9 | [post] s [S] | main.rs:100:14:100:14 | s [S] | provenance | |
70-
| main.rs:99:9:99:9 | [post] s [tuple.0] | main.rs:100:14:100:14 | s [tuple.0] | provenance | |
7168
| main.rs:99:9:99:12 | [post] s[0] [S] | main.rs:99:9:99:9 | [post] s [S] | provenance | |
72-
| main.rs:99:9:99:12 | [post] s[0] [tuple.0] | main.rs:99:9:99:9 | [post] s [tuple.0] | provenance | |
7369
| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
7470
| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:2 |
7571
| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:3 |
76-
| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [tuple.0] | provenance | MaD:2 |
77-
| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [tuple.0] | provenance | MaD:3 |
7872
| main.rs:99:19:99:27 | source(...) | main.rs:99:17:99:28 | S(...) [S] | provenance | |
7973
| main.rs:100:14:100:14 | s [S] | main.rs:100:14:100:16 | s.0 | provenance | |
80-
| main.rs:100:14:100:14 | s [tuple.0] | main.rs:100:14:100:16 | s.0 | provenance | |
8174
| main.rs:104:9:104:23 | [post] * ... [S] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | provenance | |
82-
| main.rs:104:9:104:23 | [post] * ... [tuple.0] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, tuple.0] | provenance | |
8375
| main.rs:104:10:104:10 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | |
84-
| main.rs:104:10:104:10 | [post] s [tuple.0] | main.rs:106:14:106:14 | s [tuple.0] | provenance | |
8576
| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | main.rs:104:10:104:10 | [post] s [S] | provenance | |
86-
| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, tuple.0] | main.rs:104:10:104:10 | [post] s [tuple.0] | provenance | |
8777
| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
8878
| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:2 |
8979
| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:3 |
90-
| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [tuple.0] | provenance | MaD:2 |
91-
| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [tuple.0] | provenance | MaD:3 |
9280
| main.rs:104:30:104:38 | source(...) | main.rs:104:28:104:39 | S(...) [S] | provenance | |
9381
| main.rs:105:9:105:9 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | |
94-
| main.rs:105:9:105:9 | [post] s [tuple.0] | main.rs:106:14:106:14 | s [tuple.0] | provenance | |
9582
| main.rs:105:9:105:12 | [post] s[0] [S] | main.rs:105:9:105:9 | [post] s [S] | provenance | |
96-
| main.rs:105:9:105:12 | [post] s[0] [tuple.0] | main.rs:105:9:105:9 | [post] s [tuple.0] | provenance | |
9783
| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
9884
| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:2 |
9985
| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:3 |
100-
| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [tuple.0] | provenance | MaD:2 |
101-
| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [tuple.0] | provenance | MaD:3 |
10286
| main.rs:105:19:105:27 | source(...) | main.rs:105:17:105:28 | S(...) [S] | provenance | |
10387
| main.rs:106:14:106:14 | s [S] | main.rs:106:14:106:16 | s.0 | provenance | |
104-
| main.rs:106:14:106:14 | s [tuple.0] | main.rs:106:14:106:16 | s.0 | provenance | |
10588
| main.rs:110:10:110:24 | [post] * ... [S] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | provenance | |
106-
| main.rs:110:10:110:24 | [post] * ... [tuple.0] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, tuple.0] | provenance | |
10789
| main.rs:110:11:110:11 | [post] s [S] | main.rs:111:14:111:14 | s [S] | provenance | |
108-
| main.rs:110:11:110:11 | [post] s [tuple.0] | main.rs:111:14:111:14 | s [tuple.0] | provenance | |
10990
| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | main.rs:110:11:110:11 | [post] s [S] | provenance | |
110-
| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, tuple.0] | main.rs:110:11:110:11 | [post] s [tuple.0] | provenance | |
11191
| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | |
11292
| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:2 |
11393
| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:3 |
114-
| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [tuple.0] | provenance | MaD:2 |
115-
| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [tuple.0] | provenance | MaD:3 |
11694
| main.rs:110:40:110:48 | source(...) | main.rs:110:38:110:49 | S(...) [S] | provenance | |
11795
| main.rs:111:14:111:14 | s [S] | main.rs:111:14:111:16 | s.0 | provenance | |
118-
| main.rs:111:14:111:14 | s [tuple.0] | main.rs:111:14:111:16 | s.0 | provenance | |
11996
nodes
12097
| main.rs:15:13:15:13 | s | semmle.label | s |
12198
| main.rs:15:17:15:25 | source(...) | semmle.label | source(...) |
@@ -156,10 +133,8 @@ nodes
156133
| main.rs:63:18:63:22 | SelfParam [&ref, S] | semmle.label | SelfParam [&ref, S] |
157134
| main.rs:63:56:65:9 | { ... } [&ref, S] | semmle.label | { ... } [&ref, S] |
158135
| main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | semmle.label | SelfParam [Return] [&ref, S] |
159-
| main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | semmle.label | SelfParam [Return] [&ref, tuple.0] |
160136
| main.rs:76:34:76:44 | ...: Self [S] | semmle.label | ...: Self [S] |
161137
| main.rs:77:13:77:16 | [post] self [&ref, S] | semmle.label | [post] self [&ref, S] |
162-
| main.rs:77:13:77:16 | [post] self [&ref, tuple.0] | semmle.label | [post] self [&ref, tuple.0] |
163138
| main.rs:77:13:77:18 | [post] self.0 | semmle.label | [post] self.0 |
164139
| main.rs:77:23:77:27 | other [S] | semmle.label | other [S] |
165140
| main.rs:77:23:77:29 | other.0 | semmle.label | other.0 |
@@ -187,53 +162,36 @@ nodes
187162
| main.rs:95:14:95:14 | s [S] | semmle.label | s [S] |
188163
| main.rs:95:14:95:16 | s.0 | semmle.label | s.0 |
189164
| main.rs:99:9:99:9 | [post] s [S] | semmle.label | [post] s [S] |
190-
| main.rs:99:9:99:9 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] |
191165
| main.rs:99:9:99:12 | [post] s[0] [S] | semmle.label | [post] s[0] [S] |
192-
| main.rs:99:9:99:12 | [post] s[0] [tuple.0] | semmle.label | [post] s[0] [tuple.0] |
193166
| main.rs:99:17:99:28 | S(...) [S] | semmle.label | S(...) [S] |
194167
| main.rs:99:19:99:27 | source(...) | semmle.label | source(...) |
195168
| main.rs:100:14:100:14 | s [S] | semmle.label | s [S] |
196-
| main.rs:100:14:100:14 | s [tuple.0] | semmle.label | s [tuple.0] |
197169
| main.rs:100:14:100:16 | s.0 | semmle.label | s.0 |
198170
| main.rs:104:9:104:23 | [post] * ... [S] | semmle.label | [post] * ... [S] |
199-
| main.rs:104:9:104:23 | [post] * ... [tuple.0] | semmle.label | [post] * ... [tuple.0] |
200171
| main.rs:104:10:104:10 | [post] s [S] | semmle.label | [post] s [S] |
201-
| main.rs:104:10:104:10 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] |
202172
| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | semmle.label | [post] s.index_mut(...) [&ref, S] |
203-
| main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, tuple.0] | semmle.label | [post] s.index_mut(...) [&ref, tuple.0] |
204173
| main.rs:104:28:104:39 | S(...) [S] | semmle.label | S(...) [S] |
205174
| main.rs:104:30:104:38 | source(...) | semmle.label | source(...) |
206175
| main.rs:105:9:105:9 | [post] s [S] | semmle.label | [post] s [S] |
207-
| main.rs:105:9:105:9 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] |
208176
| main.rs:105:9:105:12 | [post] s[0] [S] | semmle.label | [post] s[0] [S] |
209-
| main.rs:105:9:105:12 | [post] s[0] [tuple.0] | semmle.label | [post] s[0] [tuple.0] |
210177
| main.rs:105:17:105:28 | S(...) [S] | semmle.label | S(...) [S] |
211178
| main.rs:105:19:105:27 | source(...) | semmle.label | source(...) |
212179
| main.rs:106:14:106:14 | s [S] | semmle.label | s [S] |
213-
| main.rs:106:14:106:14 | s [tuple.0] | semmle.label | s [tuple.0] |
214180
| main.rs:106:14:106:16 | s.0 | semmle.label | s.0 |
215181
| main.rs:110:10:110:24 | [post] * ... [S] | semmle.label | [post] * ... [S] |
216-
| main.rs:110:10:110:24 | [post] * ... [tuple.0] | semmle.label | [post] * ... [tuple.0] |
217182
| main.rs:110:11:110:11 | [post] s [S] | semmle.label | [post] s [S] |
218-
| main.rs:110:11:110:11 | [post] s [tuple.0] | semmle.label | [post] s [tuple.0] |
219183
| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | semmle.label | [post] s.index_mut(...) [&ref, S] |
220-
| main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, tuple.0] | semmle.label | [post] s.index_mut(...) [&ref, tuple.0] |
221184
| main.rs:110:38:110:49 | S(...) [S] | semmle.label | S(...) [S] |
222185
| main.rs:110:40:110:48 | source(...) | semmle.label | source(...) |
223186
| main.rs:111:14:111:14 | s [S] | semmle.label | s [S] |
224-
| main.rs:111:14:111:14 | s [tuple.0] | semmle.label | s [tuple.0] |
225187
| main.rs:111:14:111:16 | s.0 | semmle.label | s.0 |
226188
subpaths
227189
| main.rs:84:14:84:14 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | main.rs:84:14:84:17 | s[0] [S] |
228190
| main.rs:85:16:85:16 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | main.rs:85:16:85:25 | s.index(...) [&ref, S] |
229191
| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:99:9:99:12 | [post] s[0] [S] |
230-
| main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:99:9:99:12 | [post] s[0] [tuple.0] |
231192
| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:104:9:104:23 | [post] * ... [S] |
232-
| main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:104:9:104:23 | [post] * ... [tuple.0] |
233193
| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:105:9:105:12 | [post] s[0] [S] |
234-
| main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:105:9:105:12 | [post] s[0] [tuple.0] |
235194
| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | main.rs:110:10:110:24 | [post] * ... [S] |
236-
| main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | main.rs:76:23:76:31 | SelfParam [Return] [&ref, tuple.0] | main.rs:110:10:110:24 | [post] * ... [tuple.0] |
237195
testFailures
238196
#select
239197
| main.rs:17:14:17:19 | arr[2] | main.rs:15:17:15:25 | source(...) | main.rs:17:14:17:19 | arr[2] | $@ | main.rs:15:17:15:25 | source(...) | source(...) |

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,9 +859,7 @@ readStep
859859
| main.rs:210:9:213:9 | Point3D {...} | main.rs:187:5:187:10 | Point3D.z | main.rs:212:13:212:13 | z |
860860
| main.rs:211:20:211:33 | Point {...} | main.rs:158:5:158:10 | Point.x | main.rs:211:28:211:28 | x |
861861
| main.rs:211:20:211:33 | Point {...} | main.rs:159:5:159:10 | Point.y | main.rs:211:31:211:31 | y |
862-
| main.rs:225:10:225:10 | s | file://:0:0:0:0 | tuple.0 | main.rs:225:10:225:12 | s.0 |
863862
| main.rs:225:10:225:10 | s | main.rs:221:22:221:24 | MyTupleStruct(0) | main.rs:225:10:225:12 | s.0 |
864-
| main.rs:226:10:226:10 | s | file://:0:0:0:0 | tuple.1 | main.rs:226:10:226:12 | s.1 |
865863
| main.rs:226:10:226:10 | s | main.rs:221:27:221:29 | MyTupleStruct(1) | main.rs:226:10:226:12 | s.1 |
866864
| main.rs:229:9:229:27 | MyTupleStruct(...) | main.rs:221:22:221:24 | MyTupleStruct(0) | main.rs:229:23:229:23 | x |
867865
| main.rs:229:9:229:27 | MyTupleStruct(...) | main.rs:221:27:221:29 | MyTupleStruct(1) | main.rs:229:26:229:26 | y |

0 commit comments

Comments
 (0)