in components/logins/src/login.rs [849:1159]
fn test_check_valid() {
#[derive(Debug, Clone)]
struct TestCase {
login: LoginEntry,
should_err: bool,
expected_err: &'static str,
}
let valid_login = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_empty_origin = LoginEntry {
origin: "".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_empty_password = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "".into(),
..Default::default()
};
let login_with_form_submit_and_http_realm = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
form_action_origin: Some("https://www.example.com".into()),
username: "".into(),
password: "test".into(),
..Default::default()
};
let login_without_form_submit_or_http_realm = LoginEntry {
origin: "https://www.example.com".into(),
username: "".into(),
password: "test".into(),
..Default::default()
};
let login_with_legacy_form_submit_and_http_realm = LoginEntry {
origin: "https://www.example.com".into(),
form_action_origin: Some("".into()),
username: "".into(),
password: "test".into(),
..Default::default()
};
let login_with_null_http_realm = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.\0com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_null_username = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "\0".into(),
password: "test".into(),
..Default::default()
};
let login_with_null_password = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "username".into(),
password: "test\0".into(),
..Default::default()
};
let login_with_newline_origin = LoginEntry {
origin: "\rhttps://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_newline_username_field = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username_field: "\n".into(),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_newline_realm = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("foo\nbar".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_newline_password = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test\n".into(),
..Default::default()
};
let login_with_period_username_field = LoginEntry {
origin: "https://www.example.com".into(),
http_realm: Some("https://www.example.com".into()),
username_field: ".".into(),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_period_form_action_origin = LoginEntry {
form_action_origin: Some(".".into()),
origin: "https://www.example.com".into(),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_javascript_form_action_origin = LoginEntry {
form_action_origin: Some("javascript:".into()),
origin: "https://www.example.com".into(),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_malformed_origin_parens = LoginEntry {
origin: " (".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_host_unicode = LoginEntry {
origin: "http://💖.com".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_origin_trailing_slash = LoginEntry {
origin: "https://www.example.com/".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_origin_expanded_ipv6 = LoginEntry {
origin: "https://[0:0:0:0:0:0:1:1]".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let login_with_unknown_protocol = LoginEntry {
origin: "moz-proxy://127.0.0.1:8888".into(),
http_realm: Some("https://www.example.com".into()),
username: "test".into(),
password: "test".into(),
..Default::default()
};
let test_cases = [
TestCase {
login: valid_login,
should_err: false,
expected_err: "",
},
TestCase {
login: login_with_empty_origin,
should_err: true,
expected_err: "Invalid login: Origin is empty",
},
TestCase {
login: login_with_empty_password,
should_err: true,
expected_err: "Invalid login: Password is empty",
},
TestCase {
login: login_with_form_submit_and_http_realm,
should_err: true,
expected_err: "Invalid login: Both `formActionOrigin` and `httpRealm` are present",
},
TestCase {
login: login_without_form_submit_or_http_realm,
should_err: true,
expected_err:
"Invalid login: Neither `formActionOrigin` or `httpRealm` are present",
},
TestCase {
login: login_with_null_http_realm,
should_err: true,
expected_err: "Invalid login: Login has illegal field: `http_realm` contains Nul",
},
TestCase {
login: login_with_null_username,
should_err: true,
expected_err: "Invalid login: Login has illegal field: `username` contains Nul",
},
TestCase {
login: login_with_null_password,
should_err: true,
expected_err: "Invalid login: Login has illegal field: `password` contains Nul",
},
TestCase {
login: login_with_newline_origin,
should_err: true,
expected_err: "Invalid login: Login has illegal field: `origin` contains newline",
},
TestCase {
login: login_with_newline_realm,
should_err: true,
expected_err:
"Invalid login: Login has illegal field: `http_realm` contains newline",
},
TestCase {
login: login_with_newline_username_field,
should_err: true,
expected_err:
"Invalid login: Login has illegal field: `username_field` contains newline",
},
TestCase {
login: login_with_newline_password,
should_err: false,
expected_err: "",
},
TestCase {
login: login_with_period_username_field,
should_err: true,
expected_err:
"Invalid login: Login has illegal field: `username_field` is a period",
},
TestCase {
login: login_with_period_form_action_origin,
should_err: false,
expected_err: "",
},
TestCase {
login: login_with_javascript_form_action_origin,
should_err: false,
expected_err: "",
},
TestCase {
login: login_with_malformed_origin_parens,
should_err: true,
expected_err: "Invalid login: Login has illegal origin",
},
TestCase {
login: login_with_host_unicode,
should_err: true,
expected_err: "Invalid login: Login has illegal field: Origin is not normalized",
},
TestCase {
login: login_with_origin_trailing_slash,
should_err: true,
expected_err: "Invalid login: Login has illegal field: Origin is not normalized",
},
TestCase {
login: login_with_origin_expanded_ipv6,
should_err: true,
expected_err: "Invalid login: Login has illegal field: Origin is not normalized",
},
TestCase {
login: login_with_unknown_protocol,
should_err: false,
expected_err: "",
},
TestCase {
login: login_with_legacy_form_submit_and_http_realm,
should_err: false,
expected_err: "",
},
];
for tc in &test_cases {
let actual = tc.login.check_valid();
if tc.should_err {
assert!(actual.is_err(), "{:#?}", tc);
assert_eq!(
tc.expected_err,
actual.unwrap_err().to_string(),
"{:#?}",
tc,
);
} else {
assert!(actual.is_ok(), "{:#?}", tc);
assert!(
tc.login.clone().fixup().is_ok(),
"Fixup failed after check_valid passed: {:#?}",
&tc,
);
}
}
}