about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSmitty <me@smitop.com>2021-07-09 12:54:02 -0400
committerSmitty <me@smitop.com>2021-07-09 12:54:02 -0400
commitb9b97bbb9d3503381de4b1beb5fcbf69e8e4c68d (patch)
tree48c0a85795639eb034a63a774fb6d4f6b5e3ccc1
parent69de693af96790a2414a6d37148b524fde457f53 (diff)
downloadrust-b9b97bbb9d3503381de4b1beb5fcbf69e8e4c68d.tar.gz
rust-b9b97bbb9d3503381de4b1beb5fcbf69e8e4c68d.zip
Reject too-long IPs quicker
Now that there can't be a bunch of leading zeros, parsing can be
optimized a bit.
-rw-r--r--library/std/src/net/parser.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/library/std/src/net/parser.rs b/library/std/src/net/parser.rs
index d43d40400ab..df6bbdeab89 100644
--- a/library/std/src/net/parser.rs
+++ b/library/std/src/net/parser.rs
@@ -289,7 +289,12 @@ impl FromStr for IpAddr {
 impl FromStr for Ipv4Addr {
     type Err = AddrParseError;
     fn from_str(s: &str) -> Result<Ipv4Addr, AddrParseError> {
-        Parser::new(s).parse_with(|p| p.read_ipv4_addr())
+        // don't try to parse if too long
+        if s.len() > 15 {
+            Err(AddrParseError(()))
+        } else {
+            Parser::new(s).parse_with(|p| p.read_ipv4_addr())
+        }
     }
 }