mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
rust/protover: don't accept whitespace in ProtoSet::from_str()
It's impossible for spaces to get here, since spaces are used as
separators between individual protocol entries higher up.
And it shouldn't ignore whitespace that isn't a literal space
character, because that would differ from the C implementation.
These were added in 9925d2e687
.
Fixes #27177. Bugfix on 0.3.3.5-rc.
This commit is contained in:
parent
936e2aa0de
commit
7b7dd9ae1c
4
changes/bug27177
Normal file
4
changes/bug27177
Normal file
@ -0,0 +1,4 @@
|
||||
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());
|
||||
@ -548,6 +546,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"));
|
||||
|
Loading…
Reference in New Issue
Block a user