diff options
| -rw-r--r-- | mullvad-problem-report/src/lib.rs | 80 |
1 files changed, 49 insertions, 31 deletions
diff --git a/mullvad-problem-report/src/lib.rs b/mullvad-problem-report/src/lib.rs index bd77f3012a..39bd66762f 100644 --- a/mullvad-problem-report/src/lib.rs +++ b/mullvad-problem-report/src/lib.rs @@ -388,7 +388,8 @@ impl ProblemReport { let out1 = Self::redact_account_number(input); let out2 = Self::redact_home_dir(&out1); let out3 = Self::redact_network_info(&out2); - self.redact_custom_strings(&out3).to_string() + let out4 = Self::redact_guids(&out3); + self.redact_custom_strings(&out4).to_string() } fn redact_account_number(input: &str) -> Cow<'_, str> { @@ -422,6 +423,16 @@ impl ProblemReport { RE.replace_all(input, "$start[REDACTED]") } + fn redact_guids(input: &str) -> Cow<'_, str> { + lazy_static! { + static ref RE: Regex = Regex::new( + r#"(?i)\{?[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\}?"# + ) + .unwrap(); + } + RE.replace_all(input, "[REDACTED]") + } + fn redact_custom_strings<'a>(&self, input: &'a str) -> Cow<'a, str> { // Can probably me made a lot faster with aho-corasick if optimization is ever needed. let mut out = Cow::from(input); @@ -576,18 +587,12 @@ mod tests { #[test] fn redacts_ipv4() { - assert_redacts_ipv4("1.2.3.4"); - assert_redacts_ipv4("10.127.0.1"); - assert_redacts_ipv4("192.168.1.1"); - assert_redacts_ipv4("10.0.16.1"); - assert_redacts_ipv4("173.54.12.32"); - assert_redacts_ipv4("68.4.4.1"); - } - - fn assert_redacts_ipv4(input: &str) { - let report = ProblemReport::new(vec![]); - let actual = report.redact(&format!("pre {} post", input)); - assert_eq!("pre [REDACTED] post", actual); + assert_redacts("1.2.3.4"); + assert_redacts("10.127.0.1"); + assert_redacts("192.168.1.1"); + assert_redacts("10.0.16.1"); + assert_redacts("173.54.12.32"); + assert_redacts("68.4.4.1"); } #[test] @@ -597,20 +602,20 @@ mod tests { #[test] fn redacts_ipv6() { - assert_redacts_ipv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); - assert_redacts_ipv6("2001:db8:85a3:0:0:8a2e:370:7334"); - assert_redacts_ipv6("2001:db8:85a3::8a2e:370:7334"); - assert_redacts_ipv6("2001:db8:0:0:0:0:2:1"); - assert_redacts_ipv6("2001:db8::2:1"); - assert_redacts_ipv6("2001:db8:0000:1:1:1:1:1"); - assert_redacts_ipv6("2001:db8:0:1:1:1:1:1"); - assert_redacts_ipv6("2001:db8:0:0:1:0:0:1"); - assert_redacts_ipv6("2001:db8::1:0:0:1"); - assert_redacts_ipv6("abcd:dead:beef::"); - assert_redacts_ipv6("abcd:dead:beef:1234::"); - assert_redacts_ipv6("::dead:beef:1234"); - assert_redacts_ipv6("0::0"); - assert_redacts_ipv6("0:0:0:0::1"); + assert_redacts("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); + assert_redacts("2001:db8:85a3:0:0:8a2e:370:7334"); + assert_redacts("2001:db8:85a3::8a2e:370:7334"); + assert_redacts("2001:db8:0:0:0:0:2:1"); + assert_redacts("2001:db8::2:1"); + assert_redacts("2001:db8:0000:1:1:1:1:1"); + assert_redacts("2001:db8:0:1:1:1:1:1"); + assert_redacts("2001:db8:0:0:1:0:0:1"); + assert_redacts("2001:db8::1:0:0:1"); + assert_redacts("abcd:dead:beef::"); + assert_redacts("abcd:dead:beef:1234::"); + assert_redacts("::dead:beef:1234"); + assert_redacts("0::0"); + assert_redacts("0:0:0:0::1"); } #[test] @@ -618,10 +623,17 @@ mod tests { assert_does_not_redact("[talpid_core::firewall]"); } - fn assert_redacts_ipv6(input: &str) { - let report = ProblemReport::new(vec![]); - let actual = report.redact(&format!("pre {} post", input)); - assert_eq!("pre [REDACTED] post", actual); + #[test] + fn redacts_guid() { + assert_redacts("6B29FC40-CA47-1067-B31D-00DD010662DA"); + assert_redacts("123123ab-12ab-89cd-45ef-012345678901"); + assert_redacts("{123123ab-12ab-89cd-45ef-012345678901}"); + } + + #[test] + fn doesnt_redact_not_guid() { + assert_does_not_redact("23123ab-12ab-89cd-45ef-012345678901"); + assert_does_not_redact("GGGGGGGG-GGGG-GGGG-GGGG-GGGGGGGGGGGG"); } #[test] @@ -629,6 +641,12 @@ mod tests { assert_does_not_redact("09:47:59"); } + fn assert_redacts(input: &str) { + let report = ProblemReport::new(vec![]); + let actual = report.redact(&format!("pre {} post", input)); + assert_eq!("pre [REDACTED] post", actual); + } + fn assert_does_not_redact(input: &str) { let report = ProblemReport::new(vec![]); let res = report.redact(input); |
