[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Forbid u32::MAX as a protover range element in rust
commit b58a2febe32f96204a94fb547e14a84c8fd32651
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
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;
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits