about summary refs log tree commit diff
path: root/src/libstd/net
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-03-05 17:20:16 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-03-05 17:20:16 -0800
commit65b4eda5a6f270f5c30beec66c59825aba0524b9 (patch)
treece26b606856fdfdd6322d7dd6206959995cb4c3b /src/libstd/net
parentf0c74f85f363a8081b31f9ab696463717ce312d5 (diff)
downloadrust-65b4eda5a6f270f5c30beec66c59825aba0524b9.tar.gz
rust-65b4eda5a6f270f5c30beec66c59825aba0524b9.zip
std: Fix peeling ports from addresses
The `rsplitn` call was called with 2 instead of 1 so the iterator would yield 3
items in some cases, not the 2 that it should have.

Closes #23076
Diffstat (limited to 'src/libstd/net')
-rw-r--r--src/libstd/net/addr.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libstd/net/addr.rs b/src/libstd/net/addr.rs
index f16f501c46a..e767ebfa2d9 100644
--- a/src/libstd/net/addr.rs
+++ b/src/libstd/net/addr.rs
@@ -293,7 +293,7 @@ impl ToSocketAddrs for str {
         }
 
         // split the string by ':' and convert the second part to u16
-        let mut parts_iter = self.rsplitn(2, ':');
+        let mut parts_iter = self.rsplitn(1, ':');
         let port_str = try_opt!(parts_iter.next(), "invalid socket address");
         let host = try_opt!(parts_iter.next(), "invalid socket address");
         let port: u16 = try_opt!(port_str.parse().ok(), "invalid port value");
@@ -590,4 +590,9 @@ mod tests {
         let a = SocketAddr::new(IpAddr::new_v4(127, 0, 0, 1), 23924);
         assert!(tsa("localhost:23924").unwrap().contains(&a));
     }
+
+    #[test]
+    fn to_socket_addr_str_bad() {
+        assert!(tsa("1200::AB00:1234::2552:7777:1313:34300").is_err());
+    }
 }