Prechádzať zdrojové kódy

Merge branch 'maint-0.3.4'

Nick Mathewson 6 rokov pred
rodič
commit
e0b8c53f56
2 zmenil súbory, kde vykonal 14 pridanie a 5 odobranie
  1. 4 0
      changes/bug27177
  2. 10 5
      src/rust/protover/protoset.rs

+ 4 - 0
changes/bug27177

@@ -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.

+ 10 - 5
src/rust/protover/protoset.rs

@@ -341,11 +341,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('-') {
@@ -370,7 +368,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());
@@ -561,6 +559,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"));