Skip to content

Commit d289e1a

Browse files
committed
Auto merge of #31981 - achanda:unspecified-ip, r=alexcrichton
Exclude 0.0.0.0 from the list of globally routable addresses
2 parents 567937d + a67fd99 commit d289e1a

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/libstd/net/ip.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ impl Ipv4Addr {
121121
}
122122

123123
/// Returns true if the address appears to be globally routable.
124+
/// See [iana-ipv4-special-registry][ipv4-sr].
125+
/// [ipv4-sr]: http://goo.gl/RaZ7lg
124126
///
125127
/// The following return false:
126128
///
@@ -129,9 +131,10 @@ impl Ipv4Addr {
129131
/// - the link-local address (169.254.0.0/16)
130132
/// - the broadcast address (255.255.255.255/32)
131133
/// - test addresses used for documentation (192.0.2.0/24, 198.51.100.0/24 and 203.0.113.0/24)
134+
/// - the unspecified address (0.0.0.0)
132135
pub fn is_global(&self) -> bool {
133136
!self.is_private() && !self.is_loopback() && !self.is_link_local() &&
134-
!self.is_broadcast() && !self.is_documentation()
137+
!self.is_broadcast() && !self.is_documentation() && !self.is_unspecified()
135138
}
136139

137140
/// Returns true if this is a multicast address.
@@ -725,22 +728,22 @@ mod tests {
725728
}
726729

727730
// address unspec loopbk privt linloc global multicast brdcast doc
728-
check(&[0, 0, 0, 0], true, false, false, false, true, false, false, false);
729-
check(&[0, 0, 0, 1], false, false, false, false, true, false, false, false);
730-
check(&[1, 0, 0, 0], false, false, false, false, true, false, false, false);
731-
check(&[10, 9, 8, 7], false, false, true, false, false, false, false, false);
732-
check(&[127, 1, 2, 3], false, true, false, false, false, false, false, false);
733-
check(&[172, 31, 254, 253], false, false, true, false, false, false, false, false);
734-
check(&[169, 254, 253, 242], false, false, false, true, false, false, false, false);
735-
check(&[192, 0, 2, 183], false, false, false, false, false, false, false, true);
736-
check(&[192, 1, 2, 183], false, false, false, false, true, false, false, false);
737-
check(&[192, 168, 254, 253], false, false, true, false, false, false, false, false);
738-
check(&[198, 51, 100, 0], false, false, false, false, false, false, false, true);
739-
check(&[203, 0, 113, 0], false, false, false, false, false, false, false, true);
740-
check(&[203, 2, 113, 0], false, false, false, false, true, false, false, false);
741-
check(&[224, 0, 0, 0], false, false, false, false, true, true, false, false);
742-
check(&[239, 255, 255, 255], false, false, false, false, true, true, false, false);
743-
check(&[255, 255, 255, 255], false, false, false, false, false, false, true, false);
731+
check(&[0, 0, 0, 0], true, false, false, false, false, false, false, false);
732+
check(&[0, 0, 0, 1], false, false, false, false, true, false, false, false);
733+
check(&[1, 0, 0, 0], false, false, false, false, true, false, false, false);
734+
check(&[10, 9, 8, 7], false, false, true, false, false, false, false, false);
735+
check(&[127, 1, 2, 3], false, true, false, false, false, false, false, false);
736+
check(&[172, 31, 254, 253], false, false, true, false, false, false, false, false);
737+
check(&[169, 254, 253, 242], false, false, false, true, false, false, false, false);
738+
check(&[192, 0, 2, 183], false, false, false, false, false, false, false, true);
739+
check(&[192, 1, 2, 183], false, false, false, false, true, false, false, false);
740+
check(&[192, 168, 254, 253], false, false, true, false, false, false, false, false);
741+
check(&[198, 51, 100, 0], false, false, false, false, false, false, false, true);
742+
check(&[203, 0, 113, 0], false, false, false, false, false, false, false, true);
743+
check(&[203, 2, 113, 0], false, false, false, false, true, false, false, false);
744+
check(&[224, 0, 0, 0], false, false, false, false, true, true, false, false);
745+
check(&[239, 255, 255, 255], false, false, false, false, true, true, false, false);
746+
check(&[255, 255, 255, 255], false, false, false, false, false, false, true, false);
744747
}
745748

746749
#[test]

0 commit comments

Comments
 (0)