about summary refs log tree commit diff
path: root/src/libstd/net
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-11-09 09:11:16 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-11-09 09:11:16 -0800
commitf16e7b4a419a5afcdd4d634da120cb834c8ebaba (patch)
tree8a4f2765b369f5d9f63917763d165ce8dfc964a0 /src/libstd/net
parent00aa3cbecc6723898a04467050891c26a7fdb758 (diff)
downloadrust-f16e7b4a419a5afcdd4d634da120cb834c8ebaba.tar.gz
rust-f16e7b4a419a5afcdd4d634da120cb834c8ebaba.zip
std: Fix endianness in Ord for IP addresses
The comparison of IP addresses should happen not always in network endianness
but rather in the host endianness format, so be sure to convert to that before
comparing addresses.

There are still locations where the endianness will factor into visible
properties, such as the hash, but these are not important to be independent of
the endianness in play (as hash values are pretty undefined anyway.

Closes #29691
Diffstat (limited to 'src/libstd/net')
-rw-r--r--src/libstd/net/ip.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs
index 827a3eb9bf6..7ba3353fd1e 100644
--- a/src/libstd/net/ip.rs
+++ b/src/libstd/net/ip.rs
@@ -235,7 +235,7 @@ impl PartialOrd for Ipv4Addr {
 #[stable(feature = "rust1", since = "1.0.0")]
 impl Ord for Ipv4Addr {
     fn cmp(&self, other: &Ipv4Addr) -> Ordering {
-        self.inner.s_addr.cmp(&other.inner.s_addr)
+        self.octets().cmp(&other.octets())
     }
 }
 
@@ -498,7 +498,7 @@ impl PartialOrd for Ipv6Addr {
 #[stable(feature = "rust1", since = "1.0.0")]
 impl Ord for Ipv6Addr {
     fn cmp(&self, other: &Ipv6Addr) -> Ordering {
-        self.inner.s6_addr.cmp(&other.inner.s6_addr)
+        self.segments().cmp(&other.segments())
     }
 }
 
@@ -786,4 +786,11 @@ mod tests {
         let a = Ipv4Addr::new(127, 0, 0, 1);
         assert_eq!(Ipv4Addr::from(2130706433), a);
     }
+
+    #[test]
+    fn ord() {
+        assert!(Ipv4Addr::new(100, 64, 3, 3) < Ipv4Addr::new(192, 0, 2, 2));
+        assert!("2001:db8:f00::1002".parse::<Ipv6Addr>().unwrap() <
+                "2001:db8:f00::2001".parse::<Ipv6Addr>().unwrap());
+    }
 }