mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-25 23:21:38 +01:00
rust/protover: parse empty string into empty *ProtoEntry
Contrary to what 15e59a1fed
said, the C implementation has always accepted an empty string
without complaint. Meanwhile the rust implementation has always
given an error. Make the rust implementation match C.
Also eliminate some more redundant tests.
Fix on 0.3.3.1-alpha.
This commit is contained in:
parent
419ea2f813
commit
44facb83d5
2 changed files with 11 additions and 14 deletions
|
@ -245,6 +245,11 @@ impl FromStr for ProtoEntry {
|
|||
/// Otherwise, the `Err` value of this `Result` is a `ProtoverError`.
|
||||
fn from_str(protocol_entry: &str) -> Result<ProtoEntry, ProtoverError> {
|
||||
let mut proto_entry: ProtoEntry = ProtoEntry::default();
|
||||
|
||||
if protocol_entry.is_empty() {
|
||||
return Ok(proto_entry);
|
||||
}
|
||||
|
||||
let entries = protocol_entry.split(' ');
|
||||
|
||||
for entry in entries {
|
||||
|
@ -493,6 +498,10 @@ impl UnvalidatedProtoEntry {
|
|||
) -> Result<Vec<(&'a str, &'a str)>, ProtoverError> {
|
||||
let mut protovers: Vec<(&str, &str)> = Vec::new();
|
||||
|
||||
if protocol_string.is_empty() {
|
||||
return Ok(protovers);
|
||||
}
|
||||
|
||||
for subproto in protocol_string.split(' ') {
|
||||
let mut parts = subproto.splitn(2, '=');
|
||||
|
||||
|
@ -851,7 +860,8 @@ mod test {
|
|||
|
||||
#[test]
|
||||
fn test_protoentry_from_str_empty() {
|
||||
assert_protoentry_is_unparseable!("");
|
||||
assert_protoentry_is_parseable!("");
|
||||
assert!(UnvalidatedProtoEntry::from_str("").is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -69,18 +69,6 @@ fn protocol_all_supported_with_one_value() {
|
|||
assert_eq!(true, unsupported.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn parse_protocol_unvalidated_with_empty() {
|
||||
let _: UnvalidatedProtoEntry = "".parse().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn parse_protocol_validated_with_empty() {
|
||||
let _: ProtoEntry = "".parse().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn protocol_all_supported_with_three_values() {
|
||||
let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap();
|
||||
|
@ -156,7 +144,6 @@ fn parse_protocol_with_unexpected_characters() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[should_panic]
|
||||
fn protover_compute_vote_returns_empty_for_empty_string() {
|
||||
let protocols: &[UnvalidatedProtoEntry] = &["".parse().unwrap()];
|
||||
let listed = ProtoverVote::compute(protocols, &1);
|
||||
|
|
Loading…
Add table
Reference in a new issue