Skip to content

Commit a1edd65

Browse files
authored
Merge pull request github#11034 from geoffw0/global
Swift: Add and use AbstractFunctionDecl.hasGlobalName predicate.
2 parents ff2a5e8 + ca586b4 commit a1edd65

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

swift/ql/lib/codeql/swift/elements/decl/AbstractFunctionDecl.qll

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
private import codeql.swift.generated.decl.AbstractFunctionDecl
2+
private import codeql.swift.elements.decl.MethodDecl
23

4+
/**
5+
* A function.
6+
*/
37
class AbstractFunctionDecl extends Generated::AbstractFunctionDecl {
48
override string toString() { result = this.getName() }
59

@@ -8,3 +12,10 @@ class AbstractFunctionDecl extends Generated::AbstractFunctionDecl {
812
*/
913
predicate hasName(string funcName) { this.getName() = funcName }
1014
}
15+
16+
/**
17+
* A free (non-member) function.
18+
*/
19+
class FreeFunctionDecl extends AbstractFunctionDecl {
20+
FreeFunctionDecl() { not this instanceof MethodDecl }
21+
}

swift/ql/lib/codeql/swift/elements/decl/MethodDecl.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ private Decl getAMember(IterableDeclContext ctx) {
99
)
1010
}
1111

12+
/**
13+
* A function that is a member of a class, struct, enum or protocol.
14+
*/
1215
class MethodDecl extends AbstractFunctionDecl {
1316
MethodDecl() {
1417
this = getAMember(any(ClassDecl c))

swift/ql/src/queries/Security/CWE-089/SqlInjection.ql

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ class CApiSqlSink extends SqlSink {
2828
CApiSqlSink() {
2929
// `sqlite3_exec` and variants of `sqlite3_prepare`.
3030
exists(CallExpr call |
31-
call.getStaticTarget().getName() =
32-
[
33-
"sqlite3_exec(_:_:_:_:_:)", "sqlite3_prepare(_:_:_:_:_:)",
34-
"sqlite3_prepare_v2(_:_:_:_:_:)", "sqlite3_prepare_v3(_:_:_:_:_:_:)",
35-
"sqlite3_prepare16(_:_:_:_:_:)", "sqlite3_prepare16_v2(_:_:_:_:_:)",
36-
"sqlite3_prepare16_v3(_:_:_:_:_:_:)"
37-
] and
31+
call.getStaticTarget()
32+
.(FreeFunctionDecl)
33+
.hasName([
34+
"sqlite3_exec(_:_:_:_:_:)", "sqlite3_prepare(_:_:_:_:_:)",
35+
"sqlite3_prepare_v2(_:_:_:_:_:)", "sqlite3_prepare_v3(_:_:_:_:_:_:)",
36+
"sqlite3_prepare16(_:_:_:_:_:)", "sqlite3_prepare16_v2(_:_:_:_:_:)",
37+
"sqlite3_prepare16_v3(_:_:_:_:_:_:)"
38+
]) and
3839
call.getArgument(1).getExpr() = this.asExpr()
3940
)
4041
}

0 commit comments

Comments
 (0)