Skip to content

Commit 4350060

Browse files
committed
Swift: Add SQLite.swift models.
1 parent 839b963 commit 4350060

File tree

3 files changed

+126
-22
lines changed

3 files changed

+126
-22
lines changed

swift/ql/lib/codeql/swift/security/CleartextStorageDatabaseExtensions.qll

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@ private class CleartextStorageDatabaseSinks extends SinkModelCsv {
127127
";;false;sqlite3_bind_text64(_:_:_:_:_:_:);;;Argument[2];database-store",
128128
";;false;sqlite3_bind_value(_:_:_:);;;Argument[2];database-store",
129129
";;false;sqlite3_bind_pointer(_:_:_:_:);;;Argument[2];database-store",
130+
// SQLite.swift
131+
";Connection;true;execute(_:);;;Argument[0];database-store",
132+
";Connection;true;prepare(_:_:);;;Argument[0];database-store",
133+
";Connection;true;prepare(_:_:);;;Argument[1];database-store",
134+
";Connection;true;run(_:_:);;;Argument[0];database-store",
135+
";Connection;true;run(_:_:);;;Argument[1];database-store",
136+
";Connection;true;scalar(_:_:);;;Argument[0];database-store",
137+
";Connection;true;scalar(_:_:);;;Argument[1];database-store",
138+
";Statement;true;init(_:_:);;;Argument[1];database-store",
139+
";Statement;true;bind(_:);;;Argument[0];database-store",
140+
";Statement;true;run(_:);;;Argument[0];database-store",
141+
";Statement;true;scalar(_:);;;Argument[0];database-store",
130142
]
131143
}
132144
}

swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,32 @@
11
edges
2+
| SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:116:17:116:17 | insertQuery |
3+
| SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:120:21:120:21 | insertQuery |
4+
| SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:124:17:124:17 | insertQuery |
5+
| SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:128:20:128:20 | insertQuery |
6+
| SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:132:24:132:24 | insertQuery |
7+
| SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:117:17:117:17 | updateQuery |
8+
| SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:121:21:121:21 | updateQuery |
9+
| SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:125:17:125:17 | updateQuery |
10+
| SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:129:20:129:20 | updateQuery |
11+
| SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:133:24:133:24 | updateQuery |
12+
| SQLite.swift:140:32:140:32 | [...] | SQLite.swift:140:32:140:32 | [...] |
13+
| SQLite.swift:140:32:140:32 | mobilePhoneNumber | SQLite.swift:140:32:140:32 | [...] |
14+
| SQLite.swift:141:28:141:28 | [...] | SQLite.swift:141:28:141:28 | [...] |
15+
| SQLite.swift:141:28:141:28 | mobilePhoneNumber | SQLite.swift:141:28:141:28 | [...] |
16+
| SQLite.swift:142:31:142:31 | [...] | SQLite.swift:142:31:142:31 | [...] |
17+
| SQLite.swift:142:31:142:31 | mobilePhoneNumber | SQLite.swift:142:31:142:31 | [...] |
18+
| SQLite.swift:145:21:145:21 | [...] | SQLite.swift:145:21:145:21 | [...] |
19+
| SQLite.swift:145:21:145:21 | mobilePhoneNumber | SQLite.swift:145:21:145:21 | [...] |
20+
| SQLite.swift:146:20:146:20 | [...] | SQLite.swift:146:20:146:20 | [...] |
21+
| SQLite.swift:146:20:146:20 | mobilePhoneNumber | SQLite.swift:146:20:146:20 | [...] |
22+
| SQLite.swift:147:23:147:23 | [...] | SQLite.swift:147:23:147:23 | [...] |
23+
| SQLite.swift:147:23:147:23 | mobilePhoneNumber | SQLite.swift:147:23:147:23 | [...] |
24+
| SQLite.swift:151:33:151:33 | mobilePhoneNumber | SQLite.swift:151:32:151:54 | [...] |
25+
| SQLite.swift:152:29:152:29 | mobilePhoneNumber | SQLite.swift:152:28:152:50 | [...] |
26+
| SQLite.swift:153:32:153:32 | mobilePhoneNumber | SQLite.swift:153:31:153:53 | [...] |
27+
| SQLite.swift:156:22:156:22 | mobilePhoneNumber | SQLite.swift:156:21:156:43 | [...] |
28+
| SQLite.swift:157:21:157:21 | mobilePhoneNumber | SQLite.swift:157:20:157:42 | [...] |
29+
| SQLite.swift:158:24:158:24 | mobilePhoneNumber | SQLite.swift:158:23:158:45 | [...] |
230
| file://:0:0:0:0 | self | file://:0:0:0:0 | .value |
331
| file://:0:0:0:0 | self | file://:0:0:0:0 | .value2 |
432
| file://:0:0:0:0 | self [value] | file://:0:0:0:0 | .value |
@@ -185,6 +213,48 @@ edges
185213
| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:34:6:34:6 | value |
186214
| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:73:2:73:2 | [post] h [password] |
187215
nodes
216+
| SQLite.swift:112:70:112:70 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
217+
| SQLite.swift:113:50:113:50 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
218+
| SQLite.swift:116:17:116:17 | insertQuery | semmle.label | insertQuery |
219+
| SQLite.swift:117:17:117:17 | updateQuery | semmle.label | updateQuery |
220+
| SQLite.swift:120:21:120:21 | insertQuery | semmle.label | insertQuery |
221+
| SQLite.swift:121:21:121:21 | updateQuery | semmle.label | updateQuery |
222+
| SQLite.swift:124:17:124:17 | insertQuery | semmle.label | insertQuery |
223+
| SQLite.swift:125:17:125:17 | updateQuery | semmle.label | updateQuery |
224+
| SQLite.swift:128:20:128:20 | insertQuery | semmle.label | insertQuery |
225+
| SQLite.swift:129:20:129:20 | updateQuery | semmle.label | updateQuery |
226+
| SQLite.swift:132:24:132:24 | insertQuery | semmle.label | insertQuery |
227+
| SQLite.swift:133:24:133:24 | updateQuery | semmle.label | updateQuery |
228+
| SQLite.swift:140:32:140:32 | [...] | semmle.label | [...] |
229+
| SQLite.swift:140:32:140:32 | [...] | semmle.label | [...] |
230+
| SQLite.swift:140:32:140:32 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
231+
| SQLite.swift:141:28:141:28 | [...] | semmle.label | [...] |
232+
| SQLite.swift:141:28:141:28 | [...] | semmle.label | [...] |
233+
| SQLite.swift:141:28:141:28 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
234+
| SQLite.swift:142:31:142:31 | [...] | semmle.label | [...] |
235+
| SQLite.swift:142:31:142:31 | [...] | semmle.label | [...] |
236+
| SQLite.swift:142:31:142:31 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
237+
| SQLite.swift:145:21:145:21 | [...] | semmle.label | [...] |
238+
| SQLite.swift:145:21:145:21 | [...] | semmle.label | [...] |
239+
| SQLite.swift:145:21:145:21 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
240+
| SQLite.swift:146:20:146:20 | [...] | semmle.label | [...] |
241+
| SQLite.swift:146:20:146:20 | [...] | semmle.label | [...] |
242+
| SQLite.swift:146:20:146:20 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
243+
| SQLite.swift:147:23:147:23 | [...] | semmle.label | [...] |
244+
| SQLite.swift:147:23:147:23 | [...] | semmle.label | [...] |
245+
| SQLite.swift:147:23:147:23 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
246+
| SQLite.swift:151:32:151:54 | [...] | semmle.label | [...] |
247+
| SQLite.swift:151:33:151:33 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
248+
| SQLite.swift:152:28:152:50 | [...] | semmle.label | [...] |
249+
| SQLite.swift:152:29:152:29 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
250+
| SQLite.swift:153:31:153:53 | [...] | semmle.label | [...] |
251+
| SQLite.swift:153:32:153:32 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
252+
| SQLite.swift:156:21:156:43 | [...] | semmle.label | [...] |
253+
| SQLite.swift:156:22:156:22 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
254+
| SQLite.swift:157:20:157:42 | [...] | semmle.label | [...] |
255+
| SQLite.swift:157:21:157:21 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
256+
| SQLite.swift:158:23:158:45 | [...] | semmle.label | [...] |
257+
| SQLite.swift:158:24:158:24 | mobilePhoneNumber | semmle.label | mobilePhoneNumber |
188258
| file://:0:0:0:0 | .value | semmle.label | .value |
189259
| file://:0:0:0:0 | .value | semmle.label | .value |
190260
| file://:0:0:0:0 | .value2 | semmle.label | .value2 |
@@ -472,6 +542,28 @@ subpaths
472542
| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:27:6:27:6 | value | file://:0:0:0:0 | [post] self [data] | testRealm.swift:66:2:66:2 | [post] g [data] |
473543
| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:34:6:34:6 | value | file://:0:0:0:0 | [post] self [password] | testRealm.swift:73:2:73:2 | [post] h [password] |
474544
#select
545+
| SQLite.swift:116:17:116:17 | insertQuery | SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:116:17:116:17 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:112:70:112:70 | mobilePhoneNumber | mobilePhoneNumber |
546+
| SQLite.swift:117:17:117:17 | updateQuery | SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:117:17:117:17 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:113:50:113:50 | mobilePhoneNumber | mobilePhoneNumber |
547+
| SQLite.swift:120:21:120:21 | insertQuery | SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:120:21:120:21 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:112:70:112:70 | mobilePhoneNumber | mobilePhoneNumber |
548+
| SQLite.swift:121:21:121:21 | updateQuery | SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:121:21:121:21 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:113:50:113:50 | mobilePhoneNumber | mobilePhoneNumber |
549+
| SQLite.swift:124:17:124:17 | insertQuery | SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:124:17:124:17 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:112:70:112:70 | mobilePhoneNumber | mobilePhoneNumber |
550+
| SQLite.swift:125:17:125:17 | updateQuery | SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:125:17:125:17 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:113:50:113:50 | mobilePhoneNumber | mobilePhoneNumber |
551+
| SQLite.swift:128:20:128:20 | insertQuery | SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:128:20:128:20 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:112:70:112:70 | mobilePhoneNumber | mobilePhoneNumber |
552+
| SQLite.swift:129:20:129:20 | updateQuery | SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:129:20:129:20 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:113:50:113:50 | mobilePhoneNumber | mobilePhoneNumber |
553+
| SQLite.swift:132:24:132:24 | insertQuery | SQLite.swift:112:70:112:70 | mobilePhoneNumber | SQLite.swift:132:24:132:24 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:112:70:112:70 | mobilePhoneNumber | mobilePhoneNumber |
554+
| SQLite.swift:133:24:133:24 | updateQuery | SQLite.swift:113:50:113:50 | mobilePhoneNumber | SQLite.swift:133:24:133:24 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:113:50:113:50 | mobilePhoneNumber | mobilePhoneNumber |
555+
| SQLite.swift:140:32:140:32 | [...] | SQLite.swift:140:32:140:32 | mobilePhoneNumber | SQLite.swift:140:32:140:32 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:140:32:140:32 | mobilePhoneNumber | mobilePhoneNumber |
556+
| SQLite.swift:141:28:141:28 | [...] | SQLite.swift:141:28:141:28 | mobilePhoneNumber | SQLite.swift:141:28:141:28 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:141:28:141:28 | mobilePhoneNumber | mobilePhoneNumber |
557+
| SQLite.swift:142:31:142:31 | [...] | SQLite.swift:142:31:142:31 | mobilePhoneNumber | SQLite.swift:142:31:142:31 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:142:31:142:31 | mobilePhoneNumber | mobilePhoneNumber |
558+
| SQLite.swift:145:21:145:21 | [...] | SQLite.swift:145:21:145:21 | mobilePhoneNumber | SQLite.swift:145:21:145:21 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:145:21:145:21 | mobilePhoneNumber | mobilePhoneNumber |
559+
| SQLite.swift:146:20:146:20 | [...] | SQLite.swift:146:20:146:20 | mobilePhoneNumber | SQLite.swift:146:20:146:20 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:146:20:146:20 | mobilePhoneNumber | mobilePhoneNumber |
560+
| SQLite.swift:147:23:147:23 | [...] | SQLite.swift:147:23:147:23 | mobilePhoneNumber | SQLite.swift:147:23:147:23 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:147:23:147:23 | mobilePhoneNumber | mobilePhoneNumber |
561+
| SQLite.swift:151:32:151:54 | [...] | SQLite.swift:151:33:151:33 | mobilePhoneNumber | SQLite.swift:151:32:151:54 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:151:33:151:33 | mobilePhoneNumber | mobilePhoneNumber |
562+
| SQLite.swift:152:28:152:50 | [...] | SQLite.swift:152:29:152:29 | mobilePhoneNumber | SQLite.swift:152:28:152:50 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:152:29:152:29 | mobilePhoneNumber | mobilePhoneNumber |
563+
| SQLite.swift:153:31:153:53 | [...] | SQLite.swift:153:32:153:32 | mobilePhoneNumber | SQLite.swift:153:31:153:53 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:153:32:153:32 | mobilePhoneNumber | mobilePhoneNumber |
564+
| SQLite.swift:156:21:156:43 | [...] | SQLite.swift:156:22:156:22 | mobilePhoneNumber | SQLite.swift:156:21:156:43 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:156:22:156:22 | mobilePhoneNumber | mobilePhoneNumber |
565+
| SQLite.swift:157:20:157:42 | [...] | SQLite.swift:157:21:157:21 | mobilePhoneNumber | SQLite.swift:157:20:157:42 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:157:21:157:21 | mobilePhoneNumber | mobilePhoneNumber |
566+
| SQLite.swift:158:23:158:45 | [...] | SQLite.swift:158:24:158:24 | mobilePhoneNumber | SQLite.swift:158:23:158:45 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:158:24:158:24 | mobilePhoneNumber | mobilePhoneNumber |
475567
| sqlite3_c_api.swift:46:27:46:27 | insertQuery | sqlite3_c_api.swift:42:69:42:69 | medicalNotes | sqlite3_c_api.swift:46:27:46:27 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | sqlite3_c_api.swift:42:69:42:69 | medicalNotes | medicalNotes |
476568
| sqlite3_c_api.swift:47:27:47:27 | updateQuery | sqlite3_c_api.swift:43:49:43:49 | medicalNotes | sqlite3_c_api.swift:47:27:47:27 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | sqlite3_c_api.swift:43:49:43:49 | medicalNotes | medicalNotes |
477569
| sqlite3_c_api.swift:58:36:58:36 | medicalNotes | sqlite3_c_api.swift:58:36:58:36 | medicalNotes | sqlite3_c_api.swift:58:36:58:36 | medicalNotes | This operation stores 'medicalNotes' in a database. It may contain unencrypted sensitive data from $@. | sqlite3_c_api.swift:58:36:58:36 | medicalNotes | medicalNotes |

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -113,49 +113,49 @@ func test_sqlite_swift_api(db: Connection, id: Int, mobilePhoneNumber: String) t
113113
let updateQuery = "UPDATE CONTACTS SET NUMBER=\(mobilePhoneNumber) WHERE ID=\(id);"
114114
let deleteQuery = "DELETE FROM CONTACTS WHERE ID=\(id);"
115115

116-
try db.execute(insertQuery) // BAD (sensitive data) [NOT DETECTED]
117-
try db.execute(updateQuery) // BAD (sensitive data) [NOT DETECTED]
116+
try db.execute(insertQuery) // BAD (sensitive data)
117+
try db.execute(updateQuery) // BAD (sensitive data)
118118
try db.execute(deleteQuery) // GOOD
119119

120-
_ = try db.prepare(insertQuery).run() // BAD (sensitive data) [NOT DETECTED]
121-
_ = try db.prepare(updateQuery).run() // BAD (sensitive data) [NOT DETECTED]
120+
_ = try db.prepare(insertQuery).run() // BAD (sensitive data)
121+
_ = try db.prepare(updateQuery).run() // BAD (sensitive data)
122122
_ = try db.prepare(deleteQuery).run() // GOOD
123123

124-
_ = try db.run(insertQuery) // BAD (sensitive data) [NOT DETECTED]
125-
_ = try db.run(updateQuery) // BAD (sensitive data) [NOT DETECTED]
124+
_ = try db.run(insertQuery) // BAD (sensitive data)
125+
_ = try db.run(updateQuery) // BAD (sensitive data)
126126
_ = try db.run(deleteQuery) // GOOD
127127

128-
_ = try db.scalar(insertQuery) // BAD (sensitive data) [NOT DETECTED]
129-
_ = try db.scalar(updateQuery) // BAD (sensitive data) [NOT DETECTED]
128+
_ = try db.scalar(insertQuery) // BAD (sensitive data)
129+
_ = try db.scalar(updateQuery) // BAD (sensitive data)
130130
_ = try db.scalar(deleteQuery) // GOOD
131131

132-
_ = try Statement(db, insertQuery).run() // BAD (sensitive data) [NOT DETECTED]
133-
_ = try Statement(db, updateQuery).run() // BAD (sensitive data) [NOT DETECTED]
132+
_ = try Statement(db, insertQuery).run() // BAD (sensitive data)
133+
_ = try Statement(db, updateQuery).run() // BAD (sensitive data)
134134
_ = try Statement(db, deleteQuery).run() // GOOD
135135

136136
// --- sensitive data in bindings ---
137137

138138
let varQuery1 = "UPDATE CONTACTS SET NUMBER=?;"
139139

140-
_ = try db.prepare(varQuery1, mobilePhoneNumber).run() // BAD (sensitive data) [NOT DETECTED]
141-
_ = try db.run(varQuery1, mobilePhoneNumber) // BAD (sensitive data) [NOT DETECTED]
142-
_ = try db.scalar(varQuery1, mobilePhoneNumber) // BAD (sensitive data) [NOT DETECTED]
140+
_ = try db.prepare(varQuery1, mobilePhoneNumber).run() // BAD (sensitive data)
141+
_ = try db.run(varQuery1, mobilePhoneNumber) // BAD (sensitive data)
142+
_ = try db.scalar(varQuery1, mobilePhoneNumber) // BAD (sensitive data)
143143

144144
let stmt1 = try db.prepare(varQuery1) // GOOD
145-
_ = try stmt1.bind(mobilePhoneNumber).run() // BAD (sensitive data) [NOT DETECTED]
146-
_ = try stmt1.run(mobilePhoneNumber) // BAD (sensitive data) [NOT DETECTED]
147-
_ = try stmt1.scalar(mobilePhoneNumber) // BAD (sensitive data) [NOT DETECTED]
145+
_ = try stmt1.bind(mobilePhoneNumber).run() // BAD (sensitive data)
146+
_ = try stmt1.run(mobilePhoneNumber) // BAD (sensitive data)
147+
_ = try stmt1.scalar(mobilePhoneNumber) // BAD (sensitive data)
148148

149149
let varQuery2 = "UPDATE CONTACTS SET NUMBER=? WHERE ID=?;"
150150

151-
_ = try db.prepare(varQuery2, [mobilePhoneNumber, id]).run() // BAD (sensitive data) [NOT DETECTED]
152-
_ = try db.run(varQuery2, [mobilePhoneNumber, id]) // BAD (sensitive data) [NOT DETECTED]
153-
_ = try db.scalar(varQuery2, [mobilePhoneNumber, id]) // BAD (sensitive data) [NOT DETECTED]
151+
_ = try db.prepare(varQuery2, [mobilePhoneNumber, id]).run() // BAD (sensitive data)
152+
_ = try db.run(varQuery2, [mobilePhoneNumber, id]) // BAD (sensitive data)
153+
_ = try db.scalar(varQuery2, [mobilePhoneNumber, id]) // BAD (sensitive data)
154154

155155
let stmt2 = try db.prepare(varQuery2) // GOOD
156-
_ = try stmt2.bind([mobilePhoneNumber, id]).run() // BAD (sensitive data) [NOT DETECTED]
157-
_ = try stmt2.run([mobilePhoneNumber, id]) // BAD (sensitive data) [NOT DETECTED]
158-
_ = try stmt2.scalar([mobilePhoneNumber, id]) // BAD (sensitive data) [NOT DETECTED]
156+
_ = try stmt2.bind([mobilePhoneNumber, id]).run() // BAD (sensitive data)
157+
_ = try stmt2.run([mobilePhoneNumber, id]) // BAD (sensitive data)
158+
_ = try stmt2.scalar([mobilePhoneNumber, id]) // BAD (sensitive data)
159159

160160
let varQuery3 = "UPDATE CONTACTS SET NUMBER=$number WHERE ID=$id;"
161161

0 commit comments

Comments
 (0)