[tor-commits] [tor/master] Forbid u32::MAX as a protover range element in rust

nickm at torproject.org nickm at torproject.org
Fri Feb 16 01:00:38 UTC 2018


commit b58a2febe32f96204a94fb547e14a84c8fd32651
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Feb 15 10:27:27 2018 -0500

    Forbid u32::MAX as a protover range element in rust
    
    Part of the 25249 fix to make rust match the C.
---
 src/rust/protover/protover.rs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/rust/protover/protover.rs b/src/rust/protover/protover.rs
index cc9be67b6..64f350c6b 100644
--- a/src/rust/protover/protover.rs
+++ b/src/rust/protover/protover.rs
@@ -9,6 +9,7 @@ use std::fmt;
 use std::collections::{HashMap, HashSet};
 use std::ops::Range;
 use std::string::String;
+use std::u32;
 
 use tor_util::strings::NUL_BYTE;
 
@@ -204,9 +205,13 @@ impl Versions {
                     versions.insert(p);
                 }
             } else {
-                versions.insert(u32::from_str(piece).or(
+                let v = u32::from_str(piece).or(
                     Err("invalid protocol entry"),
-                )?);
+                )?;
+                if v == u32::MAX {
+                    return Err("invalid protocol entry");
+                }
+                versions.insert(v);
             }
 
             if versions.len() > MAX_PROTOCOLS_TO_EXPAND {
@@ -447,6 +452,10 @@ fn expand_version_range(range: &str) -> Result<Range<u32>, &'static str> {
         "cannot parse protocol range upper bound",
     ))?;
 
+    if lower == u32::MAX || higher == u32::MAX {
+        return Err("protocol range value out of range");
+    }
+
     // We can use inclusive range syntax when it becomes stable.
     let result = lower..higher + 1;
 





More information about the tor-commits mailing list