Skip to content

Commit a159ea5

Browse files
committed
Unified: Use call graph from type inference library in data flow
1 parent 3386439 commit a159ea5

3 files changed

Lines changed: 22 additions & 15 deletions

File tree

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
11
private import unified
22
private import AllDataFlow
3-
private import codeql.unified.internal.NameBinding as N
4-
5-
private Callable getCallableFromNameBinding(NameBinding binding) {
6-
binding = result.(FunctionDeclaration).getNameNode()
7-
}
3+
private import codeql.unified.internal.typeinference.TypeInference as T
84

95
DataFlowCallable viableCallable(DataFlowCall c) {
10-
exists(CallExpr call, Callable callable, NameBinding target |
11-
c.asExplicitCall() = call and
12-
target = N::getStaticBindingTarget(N::getIdentifierFromRef(call.getCallee())) and
13-
callable = getCallableFromNameBinding(target) and
14-
result.asSourceCallable() = callable
15-
)
6+
result.asSourceCallable() = T::resolveCallTarget(c.asExplicitCall())
167
}

‎unified/ql/test/library-tests/dataflow/calls.swift‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ func t8() {
9090
func read3() {
9191
sink(field) // no flow
9292
self.store()
93-
sink(field) // $ MISSING: hasValueFlow=t8.1 // self.store() not yet resolved by call graph
93+
sink(field) // $ hasValueFlow=t8.1
9494
}
9595

9696
func read4() {
9797
sink(field) // no flow
9898
self.store()
99-
sink(self.field) // $ MISSING: hasValueFlow=t8.1 // self.store() not yet resolved by call graph
99+
sink(self.field) // $ hasValueFlow=t8.1
100100
}
101101

102102
func read5() {
@@ -114,13 +114,13 @@ func t8() {
114114
func read7() {
115115
sink(self.field) // no flow
116116
self.store()
117-
sink(field) // $ MISSING: hasValueFlow=t8.1 // self.store() not yet resolved by call graph
117+
sink(field) // $ hasValueFlow=t8.1
118118
}
119119

120120
func read8() {
121121
sink(self.field) // no flow
122122
self.store()
123-
sink(self.field) // $ MISSING: hasValueFlow=t8.1 // self.store() not yet resolved by call graph
123+
sink(self.field) // $ hasValueFlow=t8.1
124124
}
125125
}
126126
}

‎unified/ql/test/library-tests/dataflow/test.expected‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@ edges
2727
| calls.swift:67:10:67:10 | b [field] | calls.swift:67:10:67:16 | ... .field | provenance | |
2828
| calls.swift:75:13:75:17 | field | calls.swift:81:18:81:22 | field | provenance | |
2929
| calls.swift:75:13:75:17 | field | calls.swift:87:18:87:21 | self [field] | provenance | |
30+
| calls.swift:75:13:75:17 | field | calls.swift:93:18:93:22 | field | provenance | |
31+
| calls.swift:75:13:75:17 | field | calls.swift:99:18:99:21 | self [field] | provenance | |
3032
| calls.swift:75:13:75:17 | field | calls.swift:105:18:105:22 | field | provenance | |
3133
| calls.swift:75:13:75:17 | field | calls.swift:111:18:111:21 | self [field] | provenance | |
34+
| calls.swift:75:13:75:17 | field | calls.swift:117:18:117:22 | field | provenance | |
35+
| calls.swift:75:13:75:17 | field | calls.swift:123:18:123:21 | self [field] | provenance | |
3236
| calls.swift:75:21:75:34 | source(...) | calls.swift:75:13:75:17 | field | provenance | |
3337
| calls.swift:87:18:87:21 | self [field] | calls.swift:87:18:87:27 | ... .field | provenance | |
38+
| calls.swift:99:18:99:21 | self [field] | calls.swift:99:18:99:27 | ... .field | provenance | |
3439
| calls.swift:111:18:111:21 | self [field] | calls.swift:111:18:111:27 | ... .field | provenance | |
40+
| calls.swift:123:18:123:21 | self [field] | calls.swift:123:18:123:27 | ... .field | provenance | |
3541
| implicit-self.swift:16:9:16:12 | [post] self [x] | implicit-self.swift:17:14:17:17 | self [x] | provenance | |
3642
| implicit-self.swift:16:9:16:14 | ... .x | implicit-self.swift:16:9:16:12 | [post] self [x] | provenance | |
3743
| implicit-self.swift:16:18:16:31 | source(...) | implicit-self.swift:16:9:16:14 | ... .x | provenance | |
@@ -212,9 +218,15 @@ nodes
212218
| calls.swift:81:18:81:22 | field | semmle.label | field |
213219
| calls.swift:87:18:87:21 | self [field] | semmle.label | self [field] |
214220
| calls.swift:87:18:87:27 | ... .field | semmle.label | ... .field |
221+
| calls.swift:93:18:93:22 | field | semmle.label | field |
222+
| calls.swift:99:18:99:21 | self [field] | semmle.label | self [field] |
223+
| calls.swift:99:18:99:27 | ... .field | semmle.label | ... .field |
215224
| calls.swift:105:18:105:22 | field | semmle.label | field |
216225
| calls.swift:111:18:111:21 | self [field] | semmle.label | self [field] |
217226
| calls.swift:111:18:111:27 | ... .field | semmle.label | ... .field |
227+
| calls.swift:117:18:117:22 | field | semmle.label | field |
228+
| calls.swift:123:18:123:21 | self [field] | semmle.label | self [field] |
229+
| calls.swift:123:18:123:27 | ... .field | semmle.label | ... .field |
218230
| implicit-self.swift:16:9:16:12 | [post] self [x] | semmle.label | [post] self [x] |
219231
| implicit-self.swift:16:9:16:14 | ... .x | semmle.label | ... .x |
220232
| implicit-self.swift:16:18:16:31 | source(...) | semmle.label | source(...) |
@@ -412,8 +424,12 @@ testFailures
412424
| calls.swift:67:10:67:16 | ... .field | calls.swift:62:19:62:32 | source(...) | calls.swift:67:10:67:16 | ... .field | $@ | calls.swift:62:19:62:32 | source(...) | source(...) |
413425
| calls.swift:81:18:81:22 | field | calls.swift:75:21:75:34 | source(...) | calls.swift:81:18:81:22 | field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
414426
| calls.swift:87:18:87:27 | ... .field | calls.swift:75:21:75:34 | source(...) | calls.swift:87:18:87:27 | ... .field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
427+
| calls.swift:93:18:93:22 | field | calls.swift:75:21:75:34 | source(...) | calls.swift:93:18:93:22 | field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
428+
| calls.swift:99:18:99:27 | ... .field | calls.swift:75:21:75:34 | source(...) | calls.swift:99:18:99:27 | ... .field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
415429
| calls.swift:105:18:105:22 | field | calls.swift:75:21:75:34 | source(...) | calls.swift:105:18:105:22 | field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
416430
| calls.swift:111:18:111:27 | ... .field | calls.swift:75:21:75:34 | source(...) | calls.swift:111:18:111:27 | ... .field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
431+
| calls.swift:117:18:117:22 | field | calls.swift:75:21:75:34 | source(...) | calls.swift:117:18:117:22 | field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
432+
| calls.swift:123:18:123:27 | ... .field | calls.swift:75:21:75:34 | source(...) | calls.swift:123:18:123:27 | ... .field | $@ | calls.swift:75:21:75:34 | source(...) | source(...) |
417433
| implicit-self.swift:17:14:17:19 | ... .x | implicit-self.swift:16:18:16:31 | source(...) | implicit-self.swift:17:14:17:19 | ... .x | $@ | implicit-self.swift:16:18:16:31 | source(...) | source(...) |
418434
| implicit-self.swift:23:14:23:14 | x | implicit-self.swift:22:13:22:26 | source(...) | implicit-self.swift:23:14:23:14 | x | $@ | implicit-self.swift:22:13:22:26 | source(...) | source(...) |
419435
| implicit-self.swift:29:14:29:19 | ... .x | implicit-self.swift:28:13:28:26 | source(...) | implicit-self.swift:29:14:29:19 | ... .x | $@ | implicit-self.swift:28:13:28:26 | source(...) | source(...) |

0 commit comments

Comments
 (0)