Skip to content

Commit 6524f1a

Browse files
hvitvedCopilot
andcommitted
Unified: add test for accessor fallback in field resolution
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 71419e1 commit 6524f1a

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,26 @@ func summarizedFieldRead() {
3838
box.field = source("fields.summary")
3939
sink(TestType.readField(box)) // $ hasValueFlow=fields.summary
4040
}
41+
42+
class BaseBox {
43+
var field: String = ""
44+
}
45+
46+
class OverridingBox: BaseBox {
47+
override var field: String {
48+
get { super.field }
49+
set { super.field = newValue }
50+
}
51+
}
52+
53+
class UnrelatedBox {
54+
var field: String = ""
55+
}
56+
57+
func overriddenFieldRead(_ b: Bool, _ other: UnrelatedBox) {
58+
let base: BaseBox = OverridingBox()
59+
base.field = source("fields.override-read")
60+
let sub = base as! OverridingBox
61+
let q = b ? sub : other
62+
sink(q.field) // $ hasValueFlow=fields.override-read
63+
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,14 @@ edges
266266
| fields.swift:38:5:38:13 | ... .field | fields.swift:38:5:38:7 | [post] box [field] | provenance | |
267267
| fields.swift:38:17:38:40 | source(...) | fields.swift:38:5:38:13 | ... .field | provenance | |
268268
| fields.swift:39:29:39:31 | box [field] | fields.swift:39:10:39:32 | ... .readField(...) | provenance | |
269+
| fields.swift:59:5:59:8 | [post] base [field] | fields.swift:60:15:60:18 | base [field] | provenance | |
270+
| fields.swift:59:5:59:14 | ... .field | fields.swift:59:5:59:8 | [post] base [field] | provenance | |
271+
| fields.swift:59:18:59:47 | source(...) | fields.swift:59:5:59:14 | ... .field | provenance | |
272+
| fields.swift:60:9:60:11 | sub [field] | fields.swift:61:17:61:19 | sub [field] | provenance | |
273+
| fields.swift:60:15:60:18 | base [field] | fields.swift:60:9:60:11 | sub [field] | provenance | |
274+
| fields.swift:61:9:61:9 | q [field] | fields.swift:62:10:62:10 | q [field] | provenance | |
275+
| fields.swift:61:17:61:19 | sub [field] | fields.swift:61:9:61:9 | q [field] | provenance | |
276+
| fields.swift:62:10:62:10 | q [field] | fields.swift:62:10:62:16 | ... .field | provenance | |
269277
| flow-summaries.swift:2:9:2:9 | x | flow-summaries.swift:3:35:3:35 | x | provenance | |
270278
| flow-summaries.swift:2:13:2:26 | source(...) | flow-summaries.swift:2:9:2:9 | x | provenance | |
271279
| flow-summaries.swift:3:9:3:9 | y | flow-summaries.swift:4:10:4:10 | y | provenance | |
@@ -883,6 +891,15 @@ nodes
883891
| fields.swift:38:17:38:40 | source(...) | semmle.label | source(...) |
884892
| fields.swift:39:10:39:32 | ... .readField(...) | semmle.label | ... .readField(...) |
885893
| fields.swift:39:29:39:31 | box [field] | semmle.label | box [field] |
894+
| fields.swift:59:5:59:8 | [post] base [field] | semmle.label | [post] base [field] |
895+
| fields.swift:59:5:59:14 | ... .field | semmle.label | ... .field |
896+
| fields.swift:59:18:59:47 | source(...) | semmle.label | source(...) |
897+
| fields.swift:60:9:60:11 | sub [field] | semmle.label | sub [field] |
898+
| fields.swift:60:15:60:18 | base [field] | semmle.label | base [field] |
899+
| fields.swift:61:9:61:9 | q [field] | semmle.label | q [field] |
900+
| fields.swift:61:17:61:19 | sub [field] | semmle.label | sub [field] |
901+
| fields.swift:62:10:62:10 | q [field] | semmle.label | q [field] |
902+
| fields.swift:62:10:62:16 | ... .field | semmle.label | ... .field |
886903
| flow-summaries.swift:2:9:2:9 | x | semmle.label | x |
887904
| flow-summaries.swift:2:13:2:26 | source(...) | semmle.label | source(...) |
888905
| flow-summaries.swift:3:9:3:9 | y | semmle.label | y |
@@ -1344,6 +1361,7 @@ testFailures
13441361
| fields.swift:27:10:27:40 | ... .field | fields.swift:26:17:26:48 | source(...) | fields.swift:27:10:27:40 | ... .field | $@ | fields.swift:26:17:26:48 | source(...) | source(...) |
13451362
| fields.swift:33:10:33:18 | ... .field | fields.swift:32:39:32:71 | source(...) | fields.swift:33:10:33:18 | ... .field | $@ | fields.swift:32:39:32:71 | source(...) | source(...) |
13461363
| fields.swift:39:10:39:32 | ... .readField(...) | fields.swift:38:17:38:40 | source(...) | fields.swift:39:10:39:32 | ... .readField(...) | $@ | fields.swift:38:17:38:40 | source(...) | source(...) |
1364+
| fields.swift:62:10:62:16 | ... .field | fields.swift:59:18:59:47 | source(...) | fields.swift:62:10:62:16 | ... .field | $@ | fields.swift:59:18:59:47 | source(...) | source(...) |
13471365
| flow-summaries.swift:4:10:4:10 | y | flow-summaries.swift:2:13:2:26 | source(...) | flow-summaries.swift:4:10:4:10 | y | $@ | flow-summaries.swift:2:13:2:26 | source(...) | source(...) |
13481366
| flow-summaries.swift:11:14:11:14 | y | flow-summaries.swift:8:13:8:26 | source(...) | flow-summaries.swift:11:14:11:14 | y | $@ | flow-summaries.swift:8:13:8:26 | source(...) | source(...) |
13491367
| flow-summaries.swift:18:10:18:10 | y | flow-summaries.swift:16:18:16:31 | source(...) | flow-summaries.swift:18:10:18:10 | y | $@ | flow-summaries.swift:16:18:16:31 | source(...) | source(...) |

0 commit comments

Comments
 (0)