Skip to content

Commit 5496b11

Browse files
committed
Swift: Update tests based on feedback.
1 parent 4258147 commit 5496b11

File tree

2 files changed

+8
-25
lines changed

2 files changed

+8
-25
lines changed

swift/ql/test/query-tests/Security/CWE-089/SQLite.swift

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,18 @@ class Connection {
3737
public func scalar(_ statement: String, _ bindings: [String: Binding?]) throws -> Binding? { return Binding() }
3838
}
3939

40-
func sanitize(_ string: String) -> String { return string }
41-
4240
// --- tests ---
4341

4442
func test_sqlite_swift_api(db: Connection) {
4543
let localString = "user"
4644
let remoteString = try! String(contentsOf: URL(string: "http://example.com/")!)
47-
let sanitizedString = sanitize(remoteString)
45+
let remoteNumber = Int(remoteString) ?? 0
4846

4947
let unsafeQuery1 = remoteString
5048
let unsafeQuery2 = "SELECT * FROM users WHERE username='" + remoteString + "'"
5149
let unsafeQuery3 = "SELECT * FROM users WHERE username='\(remoteString)'"
5250
let safeQuery1 = "SELECT * FROM users WHERE username='\(localString)'"
53-
let safeQuery2 = "SELECT * FROM users WHERE username='\(sanitizedString)'"
51+
let safeQuery2 = "SELECT * FROM users WHERE username='\(remoteNumber)'"
5452
let varQuery = "SELECT * FROM users WHERE username=?"
5553

5654
// --- execute ---
@@ -59,7 +57,7 @@ func test_sqlite_swift_api(db: Connection) {
5957
try db.execute(unsafeQuery2) // BAD
6058
try db.execute(unsafeQuery3) // BAD
6159
try db.execute(safeQuery1) // GOOD
62-
try db.execute(safeQuery2) // GOOD (sanitized)
60+
try db.execute(safeQuery2) // GOOD
6361

6462
// --- prepared statements ---
6563

@@ -69,11 +67,8 @@ func test_sqlite_swift_api(db: Connection) {
6967
let stmt2 = try db.prepare(varQuery, localString) // GOOD
7068
try stmt2.run()
7169

72-
let stmt3 = try db.prepare(varQuery, sanitizedString) // GOOD
70+
let stmt3 = try db.prepare(varQuery, remoteString) // GOOD
7371
try stmt3.run()
7472

75-
let stmt4 = try db.prepare(varQuery, remoteString) // GOOD???
76-
try stmt4.run()
77-
7873
// TODO: test all versions of prepare, run, scalar on Connection and Statement
7974
}

swift/ql/test/query-tests/Security/CWE-089/sqlite3_c_api.swift

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -95,20 +95,18 @@ func sqlite3_finalize(
9595
_ pStmt: OpaquePointer?
9696
) -> Int32 { return SQLITE_OK }
9797

98-
func sanitize(_ string: String) -> String { return string }
99-
10098
// --- tests ---
10199

102100
func test_sqlite3_c_api(db: OpaquePointer?) {
103101
let localString = "user"
104102
let remoteString = try! String(contentsOf: URL(string: "http://example.com/")!)
105-
let sanitizedString = sanitize(remoteString)
103+
let remoteNumber = Int(remoteString) ?? 0
106104

107105
let unsafeQuery1 = remoteString
108106
let unsafeQuery2 = "SELECT * FROM users WHERE username='" + remoteString + "'"
109107
let unsafeQuery3 = "SELECT * FROM users WHERE username='\(remoteString)'"
110108
let safeQuery1 = "SELECT * FROM users WHERE username='\(localString)'"
111-
let safeQuery2 = "SELECT * FROM users WHERE username='\(sanitizedString)'"
109+
let safeQuery2 = "SELECT * FROM users WHERE username='\(remoteNumber)'"
112110
let varQuery = "SELECT * FROM users WHERE username=?"
113111

114112
// --- exec ---
@@ -117,7 +115,7 @@ func test_sqlite3_c_api(db: OpaquePointer?) {
117115
let result2 = sqlite3_exec(db, unsafeQuery2, nil, nil, nil) // BAD
118116
let result3 = sqlite3_exec(db, unsafeQuery3, nil, nil, nil) // BAD
119117
let result4 = sqlite3_exec(db, safeQuery1, nil, nil, nil) // GOOD
120-
let result5 = sqlite3_exec(db, safeQuery2, nil, nil, nil) // GOOD (sanitized)
118+
let result5 = sqlite3_exec(db, safeQuery2, nil, nil, nil) // GOOD
121119

122120
// --- prepared statements ---
123121

@@ -142,22 +140,12 @@ func test_sqlite3_c_api(db: OpaquePointer?) {
142140
var stmt3: OpaquePointer?
143141

144142
if (sqlite3_prepare(db, varQuery, -1, &stmt3, nil) == SQLITE_OK) { // GOOD
145-
if (sqlite3_bind_text(stmt3, 1, sanitizedString, -1, SQLITE_TRANSIENT) == SQLITE_OK) { // GOOD
143+
if (sqlite3_bind_text(stmt3, 1, remoteString, -1, SQLITE_TRANSIENT) == SQLITE_OK) { // GOOD
146144
let result = sqlite3_step(stmt3)
147145
// ...
148146
}
149147
}
150148
sqlite3_finalize(stmt3)
151149

152-
var stmt4: OpaquePointer?
153-
154-
if (sqlite3_prepare_v2(db, varQuery, -1, &stmt4, nil) == SQLITE_OK) { // GOOD
155-
if (sqlite3_bind_text(stmt4, 1, remoteString, -1, SQLITE_TRANSIENT) == SQLITE_OK) { // GOOD???
156-
let result = sqlite3_step(stmt4)
157-
// ...
158-
}
159-
}
160-
sqlite3_finalize(stmt4)
161-
162150
// TODO: use all versions v3, 16 etc.
163151
}

0 commit comments

Comments
 (0)