Prechádzať zdrojové kódy

Forbid u32::MAX as a protover range element in rust

Part of the 25249 fix to make rust match the C.
Nick Mathewson 6 rokov pred
rodič
commit
b58a2febe3
1 zmenil súbory, kde vykonal 11 pridanie a 2 odobranie
  1. 11 2
      src/rust/protover/protover.rs

+ 11 - 2
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;