about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/net.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libstd/net.rs b/src/libstd/net.rs
index 68f8f29748a..2325598a2d3 100644
--- a/src/libstd/net.rs
+++ b/src/libstd/net.rs
@@ -49,10 +49,13 @@ Failure:
 String must be a valid IPv4 address
 */
 fn parse_addr(ip: str) -> ip_addr {
-    let parts = vec::map(str::split_byte(ip, "."[0]),
-                         {|s| uint::from_str(s) });
+    let parts = vec::map(str::split_byte(ip, "."[0]), {|s|
+        alt uint::from_str(s) {
+          some(n) if n <= 255u { n }
+          _ { fail "Invalid IP Address part." }
+        }
+    });
     if vec::len(parts) != 4u { fail "Too many dots in IP address"; }
-    for i in parts { if i > 255u { fail "Invalid IP Address part."; } }
     ipv4(parts[0] as u8, parts[1] as u8, parts[2] as u8, parts[3] as u8)
 }