mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-12 14:13:43 +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
@ -245,6 +245,11 @@ impl FromStr for ProtoEntry {
|
|||||||
/// Otherwise, the `Err` value of this `Result` is a `ProtoverError`.
|
/// Otherwise, the `Err` value of this `Result` is a `ProtoverError`.
|
||||||
fn from_str(protocol_entry: &str) -> Result<ProtoEntry, ProtoverError> {
|
fn from_str(protocol_entry: &str) -> Result<ProtoEntry, ProtoverError> {
|
||||||
let mut proto_entry: ProtoEntry = ProtoEntry::default();
|
let mut proto_entry: ProtoEntry = ProtoEntry::default();
|
||||||
|
|
||||||
|
if protocol_entry.is_empty() {
|
||||||
|
return Ok(proto_entry);
|
||||||
|
}
|
||||||
|
|
||||||
let entries = protocol_entry.split(' ');
|
let entries = protocol_entry.split(' ');
|
||||||
|
|
||||||
for entry in entries {
|
for entry in entries {
|
||||||
@ -493,6 +498,10 @@ impl UnvalidatedProtoEntry {
|
|||||||
) -> Result<Vec<(&'a str, &'a str)>, ProtoverError> {
|
) -> Result<Vec<(&'a str, &'a str)>, ProtoverError> {
|
||||||
let mut protovers: Vec<(&str, &str)> = Vec::new();
|
let mut protovers: Vec<(&str, &str)> = Vec::new();
|
||||||
|
|
||||||
|
if protocol_string.is_empty() {
|
||||||
|
return Ok(protovers);
|
||||||
|
}
|
||||||
|
|
||||||
for subproto in protocol_string.split(' ') {
|
for subproto in protocol_string.split(' ') {
|
||||||
let mut parts = subproto.splitn(2, '=');
|
let mut parts = subproto.splitn(2, '=');
|
||||||
|
|
||||||
@ -851,7 +860,8 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_protoentry_from_str_empty() {
|
fn test_protoentry_from_str_empty() {
|
||||||
assert_protoentry_is_unparseable!("");
|
assert_protoentry_is_parseable!("");
|
||||||
|
assert!(UnvalidatedProtoEntry::from_str("").is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -69,18 +69,6 @@ fn protocol_all_supported_with_one_value() {
|
|||||||
assert_eq!(true, unsupported.is_none());
|
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]
|
#[test]
|
||||||
fn protocol_all_supported_with_three_values() {
|
fn protocol_all_supported_with_three_values() {
|
||||||
let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap();
|
let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap();
|
||||||
@ -156,7 +144,6 @@ fn parse_protocol_with_unexpected_characters() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[should_panic]
|
|
||||||
fn protover_compute_vote_returns_empty_for_empty_string() {
|
fn protover_compute_vote_returns_empty_for_empty_string() {
|
||||||
let protocols: &[UnvalidatedProtoEntry] = &["".parse().unwrap()];
|
let protocols: &[UnvalidatedProtoEntry] = &["".parse().unwrap()];
|
||||||
let listed = ProtoverVote::compute(protocols, &1);
|
let listed = ProtoverVote::compute(protocols, &1);
|
||||||
|
Loading…
Reference in New Issue
Block a user