Skip to content

Commit 87218cb

Browse files
committed
Rust: Test more examples of sensitive data.
1 parent ae2fd52 commit 87218cb

File tree

1 file changed

+110
-5
lines changed
  • rust/ql/test/library-tests/sensitivedata

1 file changed

+110
-5
lines changed

rust/ql/test/library-tests/sensitivedata/test.rs

Lines changed: 110 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ struct MyStruct {
1010
password: String,
1111
password_file_path: String,
1212
password_enabled: String,
13+
mfa: String,
1314
}
1415

1516
impl MyStruct {
@@ -22,8 +23,8 @@ fn get_password() -> String { get_string() }
2223

2324
fn test_passwords(
2425
password: &str, pass_word: &str, passwd: &str, my_password: &str, password_str: &str,
25-
pass_phrase: &str, passphrase: &str, passPhrase: &str,
26-
auth_key: &str, authkey: &str, authKey: &str, authentication_key: &str, authenticationkey: &str, authenticationKey: &str,
26+
pass_phrase: &str, passphrase: &str, passPhrase: &str, backup_code: &str,
27+
auth_key: &str, authkey: &str, authKey: &str, authentication_key: &str, authenticationkey: &str, authenticationKey: &str, oauth: &str,
2728
harmless: &str, encrypted_password: &str, password_hash: &str,
2829
ms: &MyStruct
2930
) {
@@ -36,21 +37,27 @@ fn test_passwords(
3637
sink(pass_phrase); // $ sensitive=password
3738
sink(passphrase); // $ sensitive=password
3839
sink(passPhrase); // $ sensitive=password
40+
sink(backup_code); // $ MISSING: sensitive=password
3941

4042
sink(auth_key); // $ sensitive=password
4143
sink(authkey); // $ sensitive=password
4244
sink(authKey); // $ sensitive=password
4345
sink(authentication_key); // $ sensitive=password
4446
sink(authenticationkey); // $ sensitive=password
4547
sink(authenticationKey); // $ sensitive=password
48+
sink(oauth); // $ MISSING: sensitive=password
4649

4750
sink(ms); // $ MISSING: sensitive=password
4851
sink(ms.password.as_str()); // $ MISSING: sensitive=password
52+
sink(ms.mfa.as_str()); // $ MISSING: sensitive=password
4953

5054
sink(get_password()); // $ sensitive=password
5155
let password2 = get_string();
5256
sink(password2); // $ sensitive=password
5357

58+
let qry = "password=abc";
59+
sink(qry); // $ MISSING: sensitive=password
60+
5461
// not passwords
5562
sink(harmless);
5663
sink(encrypted_password);
@@ -115,48 +122,132 @@ fn test_credentials(
115122
sink(get_next_token());
116123
}
117124

125+
struct MacAddr {
126+
values: [u8;12],
127+
}
128+
129+
struct DeviceInfo {
130+
api_key: String,
131+
deviceApiToken: String,
132+
finger_print: String,
133+
ip_address: String,
134+
macaddr12: [u8;12],
135+
mac_addr: MacAddr,
136+
networkMacAddress: String,
137+
}
138+
139+
impl DeviceInfo {
140+
fn test_device_info(&self, other: &DeviceInfo) {
141+
// private device info
142+
sink(&self.api_key); // $ MISSING: sensitive=id
143+
sink(&other.api_key); // $ MISSING: sensitive=id
144+
sink(&self.deviceApiToken); // $ MISSING: sensitive=id
145+
sink(&self.finger_print); // $ MISSING: sensitive=id
146+
sink(&self.ip_address); // $ MISSING: sensitive=id
147+
sink(self.macaddr12); // $ MISSING: sensitive=id
148+
sink(&self.mac_addr); // $ MISSING: sensitive=id
149+
sink(self.mac_addr.values); // $ MISSING: sensitive=id
150+
sink(self.mac_addr.values[0]); // $ MISSING: sensitive=id
151+
sink(&self.networkMacAddress); // $ MISSING: sensitive=id
152+
}
153+
}
154+
118155
struct Financials {
119156
harmless: String,
120157
my_bank_account_number: String,
121158
credit_card_no: String,
122159
credit_rating: i32,
123-
user_ccn: String
160+
user_ccn: String,
161+
cvv: String,
162+
beneficiary: String,
163+
routing_number: u64,
164+
routingNumberText: String,
165+
iban: String,
166+
iBAN: String,
167+
}
168+
169+
enum Gender {
170+
Male,
171+
Female,
172+
}
173+
174+
struct SSN {
175+
data: u128,
176+
}
177+
178+
impl SSN {
179+
fn get_data(&self) -> u128 {
180+
return self.data;
181+
}
124182
}
125183

126184
struct MyPrivateInfo {
127185
mobile_phone_num: String,
128186
contact_email: String,
129187
contact_e_mail_2: String,
188+
emergency_contact: String,
130189
my_ssn: String,
190+
ssn: SSN,
131191
birthday: String,
132-
emergency_contact: String,
133192
name_of_employer: String,
134193

194+
gender: Gender,
195+
genderString: String,
196+
197+
patient_id: u64,
198+
linkedPatientId: u64,
199+
patient_record: String,
135200
medical_notes: Vec<String>,
201+
confidentialMessage: String,
202+
136203
latitude: f64,
137204
longitude: Option<f64>,
138205

139206
financials: Financials
140207
}
141208

209+
enum ContactDetails {
210+
HomePhoneNumber(String),
211+
MobileNumber(String),
212+
Email(String),
213+
}
214+
142215
fn test_private_info(
143-
info: &MyPrivateInfo
216+
info: &MyPrivateInfo, details: &ContactDetails,
144217
) {
145218
// private info
146219
sink(info.mobile_phone_num.as_str()); // $ MISSING: sensitive=private
147220
sink(info.mobile_phone_num.to_string()); // $ MISSING: sensitive=private
148221
sink(info.contact_email.as_str()); // $ MISSING: sensitive=private
149222
sink(info.contact_e_mail_2.as_str()); // $ MISSING: sensitive=private
150223
sink(info.my_ssn.as_str()); // $ MISSING: sensitive=private
224+
sink(&info.ssn); // $ MISSING: sensitive=private
225+
sink(info.ssn.data); // $ MISSING: sensitive=private
226+
sink(info.ssn.get_data()); // $ MISSING: sensitive=private
151227
sink(info.birthday.as_str()); // $ MISSING: sensitive=private
152228
sink(info.emergency_contact.as_str()); // $ MISSING: sensitive=private
153229
sink(info.name_of_employer.as_str()); // $ MISSING: sensitive=private
154230

231+
sink(&info.gender); // $ MISSING: sensitive=private
232+
sink(info.genderString.as_str()); // $ MISSING: sensitive=private
233+
let sex = "Male";
234+
let gender = Gender::Female;
235+
let a = Gender::Female;
236+
sink(sex); // $ MISSING: sensitive=private
237+
sink(gender); // $ MISSING: sensitive=private
238+
sink(a); // $ MISSING: sensitive=private
239+
240+
sink(info.patient_id); // $ MISSING: sensitive=private
241+
sink(info.linkedPatientId); // $ MISSING: sensitive=private
242+
sink(info.patient_record.as_str()); // $ MISSING: sensitive=private
243+
sink(info.patient_record.trim()); // $ MISSING: sensitive=private
155244
sink(&info.medical_notes); // $ MISSING: sensitive=private
156245
sink(info.medical_notes[0].as_str()); // $ MISSING: sensitive=private
157246
for n in info.medical_notes.iter() {
158247
sink(n.as_str()); // $ MISSING: sensitive=private
159248
}
249+
sink(info.confidentialMessage.as_str()); // $ MISSING: sensitive=private
250+
sink(info.confidentialMessage.to_lowercase()); // $ MISSING: sensitive=private
160251

161252
sink(info.latitude); // $ MISSING: sensitive=private
162253
let x = info.longitude.unwrap();
@@ -166,7 +257,21 @@ fn test_private_info(
166257
sink(info.financials.credit_card_no.as_str()); // $ MISSING: sensitive=private
167258
sink(info.financials.credit_rating); // $ MISSING: sensitive=private
168259
sink(info.financials.user_ccn.as_str()); // $ MISSING: sensitive=private
260+
sink(info.financials.cvv.as_str()); // $ MISSING: sensitive=private
261+
sink(info.financials.beneficiary.as_str()); // $ MISSING: sensitive=private
262+
sink(info.financials.routing_number); // $ MISSING: sensitive=private
263+
sink(info.financials.routingNumberText.as_str()); // $ MISSING: sensitive=private
264+
sink(info.financials.iban.as_str()); // $ MISSING: sensitive=private
265+
sink(info.financials.iBAN.as_str()); // $ MISSING: sensitive=private
266+
267+
sink(ContactDetails::HomePhoneNumber("123".to_string())); // $ MISSING: sensitive=private
268+
sink(ContactDetails::MobileNumber("123".to_string())); // $ MISSING: sensitive=private
269+
sink(ContactDetails::Email("a@b".to_string())); // $ MISSING: sensitive=private
270+
if let ContactDetails::MobileNumber(num) = details {
271+
sink(num.as_str()); // $ MISSING: sensitive=private
272+
}
169273

170274
// not private info
275+
171276
sink(info.financials.harmless.as_str());
172277
}

0 commit comments

Comments
 (0)