Skip to content

Commit 06dea2d

Browse files
committed
Swift: Use sensitive private info regex from the shared library, now that it has that.
1 parent 0d4cd3e commit 06dea2d

File tree

4 files changed

+68
-31
lines changed

4 files changed

+68
-31
lines changed

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

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -64,33 +64,9 @@ class SensitivePrivateInfo extends SensitiveDataType, TPrivateInfo {
6464
override string toString() { result = "private information" }
6565

6666
override string getRegexp() {
67-
result =
68-
"(?is).*(" +
69-
// Inspired by the list on https://cwe.mitre.org/data/definitions/359.html
70-
// Government identifiers, such as Social Security Numbers
71-
"social.?security|employer.?identification|national.?insurance|resident.?id|" +
72-
"passport.?(num|no)|" +
73-
// Contact information, such as home addresses
74-
"post.?code|zip.?code|home.?addr|" +
75-
// and telephone numbers
76-
"(mob(ile)?|home).?(num|no|tel|phone)|(tel|fax|phone).?(num|no)|telephone|" +
77-
"emergency.?contact|" +
78-
// Geographic location - where the user is (or was)
79-
"l(atitude|ongitude)|nationality|" +
80-
// Financial data - such as credit card numbers, salary, bank accounts, and debts
81-
"(credit|debit|bank|visa).?(card|num|no|acc(ou?)nt)|acc(ou)?nt.?(no|num|credit)|" +
82-
"salary|billing|credit.?(rating|score)|" +
83-
// Communications - e-mail addresses, private e-mail messages, SMS text messages, chat logs, etc.
84-
"e(mail|_mail)|" +
85-
// Health - medical conditions, insurance status, prescription records
86-
"birth.?da(te|y)|da(te|y).?(of.?)?birth|" +
87-
"medical|(health|care).?plan|healthkit|appointment|prescription|" +
88-
"blood.?(type|alcohol|glucose|pressure)|heart.?(rate|rhythm)|body.?(mass|fat)|" +
89-
"menstrua|pregnan|insulin|inhaler|" +
90-
// Relationships - work and family
91-
"employ(er|ee)|spouse|maiden.?name" +
92-
// ---
93-
").*"
67+
result = HeuristicNames::maybeSensitiveRegexp(SensitiveDataClassification::private())
68+
or
69+
result = "(?is).*e(mail|_mail).*"
9470
}
9571
}
9672

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

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ edges
6969
| SQLite.swift:197:17:197:49 | [...] [Collection element] | SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | provenance | |
7070
| SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | SQLite.swift:197:17:197:49 | [...] [Collection element] | provenance | |
7171
| SQLite.swift:197:32:197:32 | mobilePhoneNumber | SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | provenance | |
72+
| file://:0:0:0:0 | [post] self [data, Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | provenance | |
7273
| file://:0:0:0:0 | [post] self [data] | testRealm2.swift:13:6:13:6 | self [Return] [data] | provenance | |
7374
| file://:0:0:0:0 | [post] self [data] | testRealm.swift:27:6:27:6 | self [Return] [data] | provenance | |
7475
| file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | testCoreData2.swift:23:13:23:13 | self [Return] [notStoredBankAccountNumber] | provenance | |
@@ -82,6 +83,7 @@ edges
8283
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | provenance | |
8384
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [password] | provenance | |
8485
| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [value] | provenance | |
86+
| file://:0:0:0:0 | value [Collection element] | file://:0:0:0:0 | [post] self [data, Collection element] | provenance | |
8587
| sqlite3_c_api.swift:42:69:42:69 | medicalNotes | sqlite3_c_api.swift:46:27:46:27 | insertQuery | provenance | |
8688
| sqlite3_c_api.swift:43:49:43:49 | medicalNotes | sqlite3_c_api.swift:47:27:47:27 | updateQuery | provenance | |
8789
| testCoreData2.swift:23:13:23:13 | value | file://:0:0:0:0 | value | provenance | |
@@ -294,15 +296,38 @@ edges
294296
| testGRDB.swift:212:98:212:107 | [...] [Collection element] | testGRDB.swift:212:98:212:107 | [...] | provenance | |
295297
| testGRDB.swift:212:99:212:99 | password | testGRDB.swift:212:98:212:107 | [...] [Collection element] | provenance | |
296298
| testRealm2.swift:13:6:13:6 | value | file://:0:0:0:0 | value | provenance | |
299+
| testRealm2.swift:13:6:13:6 | value [Collection element] | file://:0:0:0:0 | value [Collection element] | provenance | |
297300
| testRealm2.swift:18:2:18:2 | [post] o [data] | testRealm2.swift:18:2:18:2 | [post] o | provenance | |
298301
| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | provenance | |
299302
| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:18:2:18:2 | [post] o [data] | provenance | |
300303
| testRealm2.swift:24:2:24:2 | [post] o [data] | testRealm2.swift:24:2:24:2 | [post] o | provenance | |
301304
| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:13:6:13:6 | value | provenance | |
302305
| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:24:2:24:2 | [post] o [data] | provenance | |
306+
| testRealm2.swift:25:2:25:2 | [post] o [data] | testRealm2.swift:25:2:25:2 | [post] o | provenance | |
307+
| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:13:6:13:6 | value | provenance | |
308+
| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:25:2:25:2 | [post] o [data] | provenance | |
309+
| testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | testRealm2.swift:26:2:26:2 | [post] o | provenance | |
310+
| testRealm2.swift:26:2:26:2 | [post] o [data] | testRealm2.swift:26:2:26:2 | [post] o | provenance | |
311+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | provenance | |
312+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:26:2:26:2 | [post] o [data] | provenance | |
313+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | provenance | |
314+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | provenance | |
315+
| testRealm2.swift:26:18:26:18 | ssn_int | testRealm2.swift:26:11:26:25 | call to String.init(_:) | provenance | |
316+
| testRealm2.swift:26:18:26:18 | ssn_int | testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | provenance | |
303317
| testRealm2.swift:32:2:32:2 | [post] o [data] | testRealm2.swift:32:2:32:2 | [post] o | provenance | |
304318
| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:13:6:13:6 | value | provenance | |
305319
| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:32:2:32:2 | [post] o [data] | provenance | |
320+
| testRealm2.swift:33:2:33:2 | [post] o [data] | testRealm2.swift:33:2:33:2 | [post] o | provenance | |
321+
| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:13:6:13:6 | value | provenance | |
322+
| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:33:2:33:2 | [post] o [data] | provenance | |
323+
| testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | testRealm2.swift:34:2:34:2 | [post] o | provenance | |
324+
| testRealm2.swift:34:2:34:2 | [post] o [data] | testRealm2.swift:34:2:34:2 | [post] o | provenance | |
325+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | provenance | |
326+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:34:2:34:2 | [post] o [data] | provenance | |
327+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | provenance | |
328+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | provenance | |
329+
| testRealm2.swift:34:18:34:18 | int_ccn | testRealm2.swift:34:11:34:25 | call to String.init(_:) | provenance | |
330+
| testRealm2.swift:34:18:34:18 | int_ccn | testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | provenance | |
306331
| testRealm.swift:27:6:27:6 | value | file://:0:0:0:0 | value | provenance | |
307332
| testRealm.swift:34:6:34:6 | value | file://:0:0:0:0 | value | provenance | |
308333
| testRealm.swift:41:2:41:2 | [post] a [data] | testRealm.swift:41:2:41:2 | [post] a | provenance | |
@@ -419,6 +444,7 @@ nodes
419444
| file://:0:0:0:0 | .value | semmle.label | .value |
420445
| file://:0:0:0:0 | .value | semmle.label | .value |
421446
| file://:0:0:0:0 | .value2 | semmle.label | .value2 |
447+
| file://:0:0:0:0 | [post] self [data, Collection element] | semmle.label | [post] self [data, Collection element] |
422448
| file://:0:0:0:0 | [post] self [data] | semmle.label | [post] self [data] |
423449
| file://:0:0:0:0 | [post] self [data] | semmle.label | [post] self [data] |
424450
| file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | semmle.label | [post] self [notStoredBankAccountNumber] |
@@ -432,6 +458,7 @@ nodes
432458
| file://:0:0:0:0 | value | semmle.label | value |
433459
| file://:0:0:0:0 | value | semmle.label | value |
434460
| file://:0:0:0:0 | value | semmle.label | value |
461+
| file://:0:0:0:0 | value [Collection element] | semmle.label | value [Collection element] |
435462
| sqlite3_c_api.swift:42:69:42:69 | medicalNotes | semmle.label | medicalNotes |
436463
| sqlite3_c_api.swift:43:49:43:49 | medicalNotes | semmle.label | medicalNotes |
437464
| sqlite3_c_api.swift:46:27:46:27 | insertQuery | semmle.label | insertQuery |
@@ -722,17 +749,37 @@ nodes
722749
| testGRDB.swift:212:98:212:107 | [...] | semmle.label | [...] |
723750
| testGRDB.swift:212:98:212:107 | [...] [Collection element] | semmle.label | [...] [Collection element] |
724751
| testGRDB.swift:212:99:212:99 | password | semmle.label | password |
752+
| testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | semmle.label | self [Return] [data, Collection element] |
725753
| testRealm2.swift:13:6:13:6 | self [Return] [data] | semmle.label | self [Return] [data] |
726754
| testRealm2.swift:13:6:13:6 | value | semmle.label | value |
755+
| testRealm2.swift:13:6:13:6 | value [Collection element] | semmle.label | value [Collection element] |
727756
| testRealm2.swift:18:2:18:2 | [post] o | semmle.label | [post] o |
728757
| testRealm2.swift:18:2:18:2 | [post] o [data] | semmle.label | [post] o [data] |
729758
| testRealm2.swift:18:11:18:11 | myPassword | semmle.label | myPassword |
730759
| testRealm2.swift:24:2:24:2 | [post] o | semmle.label | [post] o |
731760
| testRealm2.swift:24:2:24:2 | [post] o [data] | semmle.label | [post] o [data] |
732761
| testRealm2.swift:24:11:24:11 | socialSecurityNumber | semmle.label | socialSecurityNumber |
762+
| testRealm2.swift:25:2:25:2 | [post] o | semmle.label | [post] o |
763+
| testRealm2.swift:25:2:25:2 | [post] o [data] | semmle.label | [post] o [data] |
764+
| testRealm2.swift:25:11:25:11 | ssn | semmle.label | ssn |
765+
| testRealm2.swift:26:2:26:2 | [post] o | semmle.label | [post] o |
766+
| testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] | semmle.label | [post] o [data, Collection element] |
767+
| testRealm2.swift:26:2:26:2 | [post] o [data] | semmle.label | [post] o [data] |
768+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) | semmle.label | call to String.init(_:) |
769+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | semmle.label | call to String.init(_:) [Collection element] |
770+
| testRealm2.swift:26:18:26:18 | ssn_int | semmle.label | ssn_int |
733771
| testRealm2.swift:32:2:32:2 | [post] o | semmle.label | [post] o |
734772
| testRealm2.swift:32:2:32:2 | [post] o [data] | semmle.label | [post] o [data] |
735773
| testRealm2.swift:32:11:32:11 | creditCardNumber | semmle.label | creditCardNumber |
774+
| testRealm2.swift:33:2:33:2 | [post] o | semmle.label | [post] o |
775+
| testRealm2.swift:33:2:33:2 | [post] o [data] | semmle.label | [post] o [data] |
776+
| testRealm2.swift:33:11:33:11 | CCN | semmle.label | CCN |
777+
| testRealm2.swift:34:2:34:2 | [post] o | semmle.label | [post] o |
778+
| testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] | semmle.label | [post] o [data, Collection element] |
779+
| testRealm2.swift:34:2:34:2 | [post] o [data] | semmle.label | [post] o [data] |
780+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) | semmle.label | call to String.init(_:) |
781+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | semmle.label | call to String.init(_:) [Collection element] |
782+
| testRealm2.swift:34:18:34:18 | int_ccn | semmle.label | int_ccn |
736783
| testRealm.swift:27:6:27:6 | self [Return] [data] | semmle.label | self [Return] [data] |
737784
| testRealm.swift:27:6:27:6 | value | semmle.label | value |
738785
| testRealm.swift:34:6:34:6 | self [Return] [password] | semmle.label | self [Return] [password] |
@@ -769,7 +816,13 @@ subpaths
769816
| testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | .value2 | testCoreData2.swift:105:18:105:20 | .value2 |
770817
| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:18:2:18:2 | [post] o [data] |
771818
| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:24:2:24:2 | [post] o [data] |
819+
| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:25:2:25:2 | [post] o [data] |
820+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:26:2:26:2 | [post] o [data] |
821+
| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | testRealm2.swift:26:2:26:2 | [post] o [data, Collection element] |
772822
| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:32:2:32:2 | [post] o [data] |
823+
| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:33:2:33:2 | [post] o [data] |
824+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:34:2:34:2 | [post] o [data] |
825+
| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | testRealm2.swift:34:2:34:2 | [post] o [data, Collection element] |
773826
| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:41:2:41:2 | [post] a [data] |
774827
| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:49:2:49:2 | [post] c [data] |
775828
| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:59:2:59:3 | [post] ...! [data] |
@@ -905,7 +958,11 @@ subpaths
905958
| testGRDB.swift:212:98:212:107 | [...] | testGRDB.swift:212:99:212:99 | password | testGRDB.swift:212:98:212:107 | [...] | This operation stores '[...]' in a database. It may contain unencrypted sensitive data from $@. | testGRDB.swift:212:99:212:99 | password | password |
906959
| testRealm2.swift:18:2:18:2 | o | testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:18:2:18:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:18:11:18:11 | myPassword | myPassword |
907960
| testRealm2.swift:24:2:24:2 | o | testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:24:2:24:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:24:11:24:11 | socialSecurityNumber | socialSecurityNumber |
961+
| testRealm2.swift:25:2:25:2 | o | testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:25:2:25:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:25:11:25:11 | ssn | ssn |
962+
| testRealm2.swift:26:2:26:2 | o | testRealm2.swift:26:18:26:18 | ssn_int | testRealm2.swift:26:2:26:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:26:18:26:18 | ssn_int | ssn_int |
908963
| testRealm2.swift:32:2:32:2 | o | testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:32:2:32:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:32:11:32:11 | creditCardNumber | creditCardNumber |
964+
| testRealm2.swift:33:2:33:2 | o | testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:33:2:33:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:33:11:33:11 | CCN | CCN |
965+
| testRealm2.swift:34:2:34:2 | o | testRealm2.swift:34:18:34:18 | int_ccn | testRealm2.swift:34:2:34:2 | [post] o | This operation stores 'o' in a database. It may contain unencrypted sensitive data from $@. | testRealm2.swift:34:18:34:18 | int_ccn | int_ccn |
909966
| testRealm.swift:41:2:41:2 | a | testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:41:2:41:2 | [post] a | This operation stores 'a' in a database. It may contain unencrypted sensitive data from $@. | testRealm.swift:41:11:41:11 | myPassword | myPassword |
910967
| testRealm.swift:49:2:49:2 | c | testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:49:2:49:2 | [post] c | This operation stores 'c' in a database. It may contain unencrypted sensitive data from $@. | testRealm.swift:49:11:49:11 | myPassword | myPassword |
911968
| testRealm.swift:59:2:59:3 | ...! | testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:59:2:59:3 | [post] ...! | This operation stores '...!' in a database. It may contain unencrypted sensitive data from $@. | testRealm.swift:59:12:59:12 | myPassword | myPassword |

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,11 @@
142142
| testGRDB.swift:212:99:212:99 | password | label:password, type:password |
143143
| testRealm2.swift:18:11:18:11 | myPassword | label:myPassword, type:password |
144144
| testRealm2.swift:24:11:24:11 | socialSecurityNumber | label:socialSecurityNumber, type:private information |
145+
| testRealm2.swift:25:11:25:11 | ssn | label:ssn, type:private information |
146+
| testRealm2.swift:26:18:26:18 | ssn_int | label:ssn_int, type:private information |
145147
| testRealm2.swift:32:11:32:11 | creditCardNumber | label:creditCardNumber, type:private information |
148+
| testRealm2.swift:33:11:33:11 | CCN | label:CCN, type:private information |
149+
| testRealm2.swift:34:18:34:18 | int_ccn | label:int_ccn, type:private information |
146150
| testRealm.swift:31:20:31:20 | .password | label:password, type:password |
147151
| testRealm.swift:41:11:41:11 | myPassword | label:myPassword, type:password |
148152
| testRealm.swift:49:11:49:11 | myPassword | label:myPassword, type:password |

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ func test1(o: MyRealmSwiftObject3, myHarmless: String, myPassword: String) {
2222

2323
func test2(o: MyRealmSwiftObject3, ccn: String, socialSecurityNumber: String, ssn: String, ssn_int: Int, userSSN: String, classno: String) {
2424
o.data = socialSecurityNumber // BAD
25-
o.data = ssn // BAD [NOT DETECTED]
26-
o.data = String(ssn_int) // BAD [NOT DETECTED]
25+
o.data = ssn // BAD
26+
o.data = String(ssn_int) // BAD
2727
o.data = userSSN // BAD [NOT DETECTED]
2828
o.data = classno // GOOD
2929
}
3030

3131
func test3(o: MyRealmSwiftObject3, ccn: String, creditCardNumber: String, CCN: String, int_ccn: Int, userCcn: String, succnode: String) {
3232
o.data = creditCardNumber // BAD
33-
o.data = CCN // BAD [NOT DETECTED]
34-
o.data = String(int_ccn) // BAD [NOT DETECTED]
33+
o.data = CCN // BAD
34+
o.data = String(int_ccn) // BAD
3535
o.data = userCcn // BAD [NOT DETECTED]
3636
o.data = succnode // GOOD
3737
}

0 commit comments

Comments
 (0)