Skip to content

Commit 58f4b76

Browse files
authored
Merge pull request github#13223 from geoffw0/useasnominaltypedecl
Swift: Use asNominalTypeDecl more.
2 parents 999e7f9 + 68bdd51 commit 58f4b76

File tree

14 files changed

+40
-59
lines changed

14 files changed

+40
-59
lines changed

swift/ql/lib/codeql/swift/elements/AstNode.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ class AstNode extends Generated::AstNode {
5757

5858
/**
5959
* Gets the nearest declaration that contains this AST node, if any.
60+
*
61+
* Note that the nearest declaration may be an extension of a type declaration. If you always
62+
* want the type declaration and not the extension, use `getEnclosingDecl().asNominalTypeDecl()`.
6063
*/
6164
final Decl getEnclosingDecl() { result = Cached::getEnclosingDecl(this) }
6265

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Collection.qll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,7 @@ private class CollectionFieldsInheritTaint extends TaintInheritingContent,
4848
{
4949
CollectionFieldsInheritTaint() {
5050
exists(FieldDecl f | this.getField() = f |
51-
(
52-
f.getEnclosingDecl().(NominalTypeDecl).getName() = ["Collection", "BidirectionalCollection"] or
53-
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() =
54-
["Collection", "BidirectionalCollection"]
55-
) and
51+
f.getEnclosingDecl().asNominalTypeDecl().getName() = ["Collection", "BidirectionalCollection"] and
5652
f.getName() = ["first", "last"]
5753
)
5854
}

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/CustomUrlSchemes.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ private class UrlLaunchOptionsRemoteFlowSource extends RemoteFlowSource {
4949
private class ApplicationWithLaunchOptionsFunc extends Function {
5050
ApplicationWithLaunchOptionsFunc() {
5151
this.getName() = "application(_:" + ["did", "will"] + "FinishLaunchingWithOptions:)" and
52-
this.getEnclosingDecl().(ClassOrStructDecl).getABaseTypeDecl*().(ProtocolDecl).getName() =
52+
this.getEnclosingDecl().asNominalTypeDecl().getABaseTypeDecl*().(ProtocolDecl).getName() =
5353
"UIApplicationDelegate"
5454
}
5555
}
5656

5757
private class LaunchOptionsUrlVarDecl extends VarDecl {
5858
LaunchOptionsUrlVarDecl() {
59-
this.getEnclosingDecl().(StructDecl).getFullName() = "UIApplication.LaunchOptionsKey" and
59+
this.getEnclosingDecl().asNominalTypeDecl().getFullName() = "UIApplication.LaunchOptionsKey" and
6060
this.getName() = "url"
6161
}
6262
}
@@ -68,7 +68,7 @@ private class UiOpenUrlContextUrlInheritTaint extends TaintInheritingContent,
6868
DataFlow::Content::FieldContent
6969
{
7070
UiOpenUrlContextUrlInheritTaint() {
71-
this.getField().getEnclosingDecl().(NominalTypeDecl).getName() = "UIOpenURLContext" and
71+
this.getField().getEnclosingDecl().asNominalTypeDecl().getName() = "UIOpenURLContext" and
7272
this.getField().getName() = "url"
7373
}
7474
}
@@ -80,7 +80,7 @@ private class UserActivityUrlInheritTaint extends TaintInheritingContent,
8080
DataFlow::Content::FieldContent
8181
{
8282
UserActivityUrlInheritTaint() {
83-
this.getField().getEnclosingDecl().(NominalTypeDecl).getName() = "NSUserActivity" and
83+
this.getField().getEnclosingDecl().asNominalTypeDecl().getName() = "NSUserActivity" and
8484
this.getField().getName() = "webpageURL"
8585
}
8686
}
@@ -93,7 +93,7 @@ private class ConnectionOptionsFieldsInheritTaint extends TaintInheritingContent
9393
DataFlow::Content::FieldContent
9494
{
9595
ConnectionOptionsFieldsInheritTaint() {
96-
this.getField().getEnclosingDecl().(NominalTypeDecl).getName() = "ConnectionOptions" and
96+
this.getField().getEnclosingDecl().asNominalTypeDecl().getName() = "ConnectionOptions" and
9797
this.getField().getName() = ["userActivities", "urlContexts"]
9898
}
9999
}

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/FilePath.qll

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ private class FilePathFieldsInheritTaint extends TaintInheritingContent,
6060
{
6161
FilePathFieldsInheritTaint() {
6262
exists(FieldDecl f | this.getField() = f |
63-
(
64-
f.getEnclosingDecl().(NominalTypeDecl) instanceof FilePath or
65-
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl() instanceof FilePath
66-
) and
63+
f.getEnclosingDecl().asNominalTypeDecl() instanceof FilePath and
6764
f.getName() =
6865
[
6966
"description", "debugDescription", "components", "extension", "lastComponent", "root",
@@ -82,12 +79,8 @@ private class FilePathComponentFieldsInheritTaint extends TaintInheritingContent
8279
{
8380
FilePathComponentFieldsInheritTaint() {
8481
exists(FieldDecl f | this.getField() = f |
85-
(
86-
f.getEnclosingDecl().(NominalTypeDecl).getFullName() =
87-
["FilePath.Component", "FilePath.Root"] or
88-
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getFullName() =
89-
["FilePath.Component", "FilePath.Root"]
90-
) and
82+
f.getEnclosingDecl().asNominalTypeDecl().getFullName() =
83+
["FilePath.Component", "FilePath.Root"] and
9184
f.getName() = ["extension", "stem", "string"]
9285
)
9386
}

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/NsData.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private class NsMutableDataSummaries extends SummaryModelCsv {
7575
private class NsDataTaintedFields extends TaintInheritingContent, DataFlow::Content::FieldContent {
7676
NsDataTaintedFields() {
7777
exists(FieldDecl f | this.getField() = f |
78-
f.getEnclosingDecl() instanceof NsData and
78+
f.getEnclosingDecl().asNominalTypeDecl() instanceof NsData and
7979
f.getName() = ["bytes", "description"]
8080
)
8181
}
@@ -87,7 +87,7 @@ private class NsMutableDataTaintedFields extends TaintInheritingContent,
8787
{
8888
NsMutableDataTaintedFields() {
8989
exists(FieldDecl f | this.getField() = f |
90-
f.getEnclosingDecl() instanceof NsMutableData and
90+
f.getEnclosingDecl().asNominalTypeDecl() instanceof NsMutableData and
9191
f.getName() = "mutableBytes"
9292
)
9393
}

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/NsString.qll

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,7 @@ private class NsStringFieldsInheritTaint extends TaintInheritingContent,
133133
{
134134
NsStringFieldsInheritTaint() {
135135
exists(FieldDecl f | this.getField() = f |
136-
(
137-
f.getEnclosingDecl().(NominalTypeDecl).getName() = "NSString" or
138-
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() = "NSString"
139-
) and
136+
f.getEnclosingDecl().asNominalTypeDecl().getName() = "NSString" and
140137
f.getName() =
141138
[
142139
"utf8String", "lowercased", "localizedLowedCase", "uppercased", "localizedUppercase",

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Sequence.qll

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ private class SequenceFieldsInheritTaint extends TaintInheritingContent,
3838
{
3939
SequenceFieldsInheritTaint() {
4040
exists(FieldDecl f | this.getField() = f |
41-
(
42-
f.getEnclosingDecl().(NominalTypeDecl).getName() = "Sequence" or
43-
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() = "Sequence"
44-
) and
41+
f.getEnclosingDecl().asNominalTypeDecl().getName() = "Sequence" and
4542
f.getName() = "lazy"
4643
)
4744
}

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/String.qll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,7 @@ private class StringFieldsInheritTaint extends TaintInheritingContent,
125125
{
126126
StringFieldsInheritTaint() {
127127
exists(FieldDecl f | this.getField() = f |
128-
(
129-
f.getEnclosingDecl().(NominalTypeDecl).getName() = ["String", "StringProtocol"] or
130-
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() =
131-
["String", "StringProtocol"]
132-
) and
128+
f.getEnclosingDecl().asNominalTypeDecl().getName() = ["String", "StringProtocol"] and
133129
f.getName() =
134130
[
135131
"unicodeScalars", "utf8", "utf16", "lazy", "utf8CString", "description",

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Url.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ class UrlDecl extends StructDecl {
1616
* A content implying that, if a `URL` is tainted, then all its fields are tainted.
1717
*/
1818
private class UriFieldsInheritTaint extends TaintInheritingContent, DataFlow::Content::FieldContent {
19-
UriFieldsInheritTaint() { this.getField().getEnclosingDecl() instanceof UrlDecl }
19+
UriFieldsInheritTaint() {
20+
this.getField().getEnclosingDecl().asNominalTypeDecl() instanceof UrlDecl
21+
}
2022
}
2123

2224
/**
@@ -27,7 +29,7 @@ private class UrlRequestFieldsInheritTaint extends TaintInheritingContent,
2729
DataFlow::Content::FieldContent
2830
{
2931
UrlRequestFieldsInheritTaint() {
30-
this.getField().getEnclosingDecl().(NominalTypeDecl).getName() = "URLRequest" and
32+
this.getField().getEnclosingDecl().asNominalTypeDecl().getName() = "URLRequest" and
3133
this.getField().getName() =
3234
["url", "httpBody", "httpBodyStream", "mainDocument", "allHTTPHeaderFields"]
3335
}

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/WebView.qll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ private class WKScriptMessageBodyInheritsTaint extends TaintInheritingContent,
3232
{
3333
WKScriptMessageBodyInheritsTaint() {
3434
exists(FieldDecl f | this.getField() = f |
35-
f.getEnclosingDecl() instanceof WKScriptMessageDecl and
35+
f.getEnclosingDecl().asNominalTypeDecl() instanceof WKScriptMessageDecl and
3636
f.getName() = "body"
3737
)
3838
}
@@ -170,16 +170,16 @@ private class JsExportedType extends ClassOrStructDecl {
170170
private class JsExportedSource extends RemoteFlowSource {
171171
JsExportedSource() {
172172
exists(Method adopter, Method base |
173-
base.getEnclosingDecl() instanceof JsExportedProto and
174-
adopter.getEnclosingDecl() instanceof JsExportedType
173+
base.getEnclosingDecl().asNominalTypeDecl() instanceof JsExportedProto and
174+
adopter.getEnclosingDecl().asNominalTypeDecl() instanceof JsExportedType
175175
|
176176
this.(DataFlow::ParameterNode).getParameter().getDeclaringFunction() = adopter and
177177
pragma[only_bind_out](adopter.getName()) = pragma[only_bind_out](base.getName())
178178
)
179179
or
180180
exists(FieldDecl adopter, FieldDecl base |
181-
base.getEnclosingDecl() instanceof JsExportedProto and
182-
adopter.getEnclosingDecl() instanceof JsExportedType
181+
base.getEnclosingDecl().asNominalTypeDecl() instanceof JsExportedProto and
182+
adopter.getEnclosingDecl().asNominalTypeDecl() instanceof JsExportedType
183183
|
184184
this.asExpr().(MemberRefExpr).getMember() = adopter and
185185
pragma[only_bind_out](adopter.getName()) = pragma[only_bind_out](base.getName())
@@ -210,7 +210,7 @@ private class WKUserScriptInheritsTaint extends TaintInheritingContent,
210210
{
211211
WKUserScriptInheritsTaint() {
212212
exists(FieldDecl f | this.getField() = f |
213-
f.getEnclosingDecl().(ClassOrStructDecl).getName() = "WKUserScript" and
213+
f.getEnclosingDecl().asNominalTypeDecl().getName() = "WKUserScript" and
214214
f.getName() = "source"
215215
)
216216
}

0 commit comments

Comments
 (0)