From 0f9416f3b453a539a38b9222fdea3786a8a3def9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20F=C3=A4rnstrand?= Date: Mon, 13 Jun 2016 22:57:39 +0200 Subject: [PATCH] Fix Ipv4Network::contains bug --- src/lib.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 7e8d5de..3c10a72 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,7 +78,8 @@ impl Ipv4Network { pub fn contains(&self, ip: Ipv4Addr) -> bool { let (_, net) = self.network(); - (u32::from(ip) & net) == net + let (_, mask) = self.mask(); + (u32::from(ip) & mask) == net } fn parse_addr(addr: &str) -> Result { @@ -289,4 +290,11 @@ mod test { let ip = Ipv4Addr::new(74, 125, 227, 4); assert!(cidr.contains(ip)); } + + #[test] + fn not_contains_v4() { + let cidr = Ipv4Network::new(Ipv4Addr::new(10, 0, 0, 50), 24); + let ip = Ipv4Addr::new(10, 1, 0, 1); + assert!(!cidr.contains(ip)); + } }