Commit 87aacbfb authored by Nick Mathewson's avatar Nick Mathewson 🏃
Browse files

Merge remote-tracking branch 'onionk/rust-protospace' into maint-0.3.3

parents cc93f175 7b7dd9ae
o Minor bugfixes (rust):
- Protover parsing was accepting the presence of whitespace in version
strings, which the C implementation would choke on, e.g. "Desc=1\t,2".
Fixes bug 27177; bugfix on 0.3.3.5-rc.
......@@ -340,11 +340,9 @@ impl FromStr for ProtoSet {
/// ```
fn from_str(version_string: &str) -> Result<Self, Self::Err> {
let mut pairs: Vec<(Version, Version)> = Vec::new();
let pieces: ::std::str::Split<char> = version_string.trim().split(',');
for piece in pieces {
let p: &str = piece.trim();
let pieces: ::std::str::Split<char> = version_string.split(',');
for p in pieces {
if p.is_empty() {
continue;
} else if p.contains('-') {
......@@ -369,7 +367,7 @@ impl FromStr for ProtoSet {
pairs.push((v, v));
}
}
// If we were passed in an empty string, or a bunch of whitespace, or
// If we were passed in an empty string, or
// simply a comma, or a pile of commas, then return an empty ProtoSet.
if pairs.len() == 0 {
return Ok(ProtoSet::default());
......@@ -560,6 +558,13 @@ mod test {
assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("%="));
}
#[test]
fn test_versions_from_str_whitespace() {
assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,2\n"));
assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1\r,2"));
assert_eq!(Err(ProtoverError::Unparseable), ProtoSet::from_str("1,\t2"));
}
#[test]
fn test_versions_from_str_overlap() {
assert_eq!(Err(ProtoverError::Overlap), ProtoSet::from_str("1-3,2-4"));
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment