Skip to content

Commit d71eeb4

Browse files
committed
Swift: First fix for MaD on generics.
1 parent 8f24b0b commit d71eeb4

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

swift/ql/lib/codeql/swift/dataflow/ExternalFlow.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -446,17 +446,17 @@ private Element interpretElement0(
446446
or
447447
// Fields
448448
signature = "" and
449-
exists(NominalType nomType, IterableDeclContext decl, FieldDecl field |
449+
exists(NominalTypeDecl nomTypeDecl, IterableDeclContext decl, FieldDecl field |
450450
field.getName() = name and
451451
field = decl.getAMember() and
452-
nomType.getFullName() = type and
452+
nomTypeDecl.getFullName() = type and
453453
result = field
454454
|
455455
subtypes = true and
456-
getDeclType(decl) = nomType.getADerivedType*()
456+
decl = nomTypeDecl.getADerivedTypeDecl*()
457457
or
458458
subtypes = false and
459-
getDeclType(decl) = nomType
459+
decl = nomTypeDecl
460460
)
461461
)
462462
}

swift/ql/test/library-tests/dataflow/flowsources/FlowSources.expected

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,30 @@
66
| data.swift:18:20:18:20 | call to init(contentsOf:options:) | external |
77
| data.swift:18:20:18:54 | call to init(contentsOf:options:) | external |
88
| file://:0:0:0:0 | .source1 | external |
9+
| file://:0:0:0:0 | .source1 | external |
10+
| file://:0:0:0:0 | .source4 | external |
911
| file://:0:0:0:0 | .source9 | external |
1012
| generics.swift:10:9:10:16 | .source1 | external |
1113
| generics.swift:11:9:11:16 | .source2 | external |
1214
| generics.swift:12:9:12:24 | call to source3() | external |
15+
| generics.swift:48:9:48:17 | .source1 | external |
16+
| generics.swift:49:9:49:17 | .source2 | external |
17+
| generics.swift:51:9:51:18 | .source1 | external |
18+
| generics.swift:52:9:52:18 | .source2 | external |
19+
| generics.swift:54:9:54:17 | .source1 | external |
20+
| generics.swift:55:9:55:17 | .source2 | external |
21+
| generics.swift:57:9:57:17 | .source4 | external |
22+
| generics.swift:58:9:58:17 | .source5 | external |
23+
| generics.swift:62:9:62:18 | .source1 | external |
24+
| generics.swift:63:9:63:18 | .source2 | external |
1325
| generics.swift:65:9:65:18 | .source9 | external |
1426
| generics.swift:66:9:66:18 | .source10 | external |
1527
| generics.swift:67:9:67:27 | call to source11() | external |
16-
| generics.swift:68:9:68:18 | .source12 | external |
1728
| generics.swift:69:9:69:27 | call to source13() | external |
1829
| generics.swift:88:9:88:15 | .source1 | external |
1930
| generics.swift:89:9:89:15 | .source2 | external |
31+
| generics.swift:90:9:90:14 | .source1 | external |
32+
| generics.swift:92:9:92:15 | .source1 | external |
2033
| generics.swift:112:9:112:15 | .source1 | external |
2134
| generics.swift:113:9:113:15 | .source2 | external |
2235
| nsdata.swift:18:17:18:17 | call to init(contentsOf:) | external |

swift/ql/test/library-tests/dataflow/flowsources/generics.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,27 @@ extension MyDerived2
4545
}
4646

4747
func useDerived(generic: MyGeneric<Int>, generic2: MyGeneric<Any>, derived: MyDerived<Int>, derived2: MyDerived2) {
48-
_ = generic.source1 // SOURCE [NOT DETECTED]
49-
_ = generic.source2 // SOURCE [NOT DETECTED]
48+
_ = generic.source1 // SOURCE
49+
_ = generic.source2 // SOURCE
5050
_ = generic.source3() // SOURCE [NOT DETECTED]
51-
_ = generic2.source1 // SOURCE [NOT DETECTED]
52-
_ = generic2.source2 // SOURCE [NOT DETECTED]
51+
_ = generic2.source1 // SOURCE
52+
_ = generic2.source2 // SOURCE
5353
_ = generic2.source3() // SOURCE [NOT DETECTED]
54-
_ = derived.source1 // SOURCE [NOT DETECTED]
55-
_ = derived.source2 // SOURCE [NOT DETECTED]
54+
_ = derived.source1 // SOURCE
55+
_ = derived.source2 // SOURCE
5656
_ = derived.source3() // SOURCE [NOT DETECTED]
57-
_ = derived.source4 // SOURCE [NOT DETECTED]
58-
_ = derived.source5 // SOURCE [NOT DETECTED]
57+
_ = derived.source4 // SOURCE
58+
_ = derived.source5 // SOURCE
5959
_ = derived.source6() // SOURCE [NOT DETECTED]
6060
_ = derived.source7 // SOURCE [NOT DETECTED]
6161
_ = derived.source8() // SOURCE [NOT DETECTED]
62-
_ = derived2.source1 // SOURCE [NOT DETECTED]
63-
_ = derived2.source2 // SOURCE [NOT DETECTED]
62+
_ = derived2.source1 // SOURCE
63+
_ = derived2.source2 // SOURCE
6464
_ = derived2.source3() // SOURCE [NOT DETECTED]
6565
_ = derived2.source9 // SOURCE
6666
_ = derived2.source10 // SOURCE
6767
_ = derived2.source11() // SOURCE
68-
_ = derived2.source12 // SOURCE
68+
_ = derived2.source12 // SOURCE [NOT DETECTED]
6969
_ = derived2.source13() // SOURCE
7070
}
7171

@@ -87,9 +87,9 @@ extension MyImpl {
8787
func useProtocol(proto: MyProtocol, impl: MyImpl<Int>, impl2: MyImpl<Any>) {
8888
_ = proto.source1 // SOURCE
8989
_ = proto.source2 // SOURCE
90-
_ = impl.source1 // SOURCE [NOT DETECTED]
90+
_ = impl.source1 // SOURCE
9191
_ = impl.source2 // SOURCE [NOT DETECTED]
92-
_ = impl2.source1 // SOURCE [NOT DETECTED]
92+
_ = impl2.source1 // SOURCE
9393
_ = impl2.source2 // SOURCE [NOT DETECTED]
9494
}
9595

0 commit comments

Comments
 (0)