Skip to content

Commit 1e18c03

Browse files
committedOct 30, 2017
Fix Cidr::contains_addr for zero length prefixes.
1 parent 1e10525 commit 1e18c03

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed
 

Diff for: ‎src/wire/ipv4.rs

+6
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ impl Cidr {
109109
/// Query whether the subnetwork described by this IPv4 CIDR block contains
110110
/// the given address.
111111
pub fn contains_addr(&self, addr: &Address) -> bool {
112+
// right shift by 32 is not legal
113+
if self.prefix_len == 0 { return true }
114+
112115
let shift = 32 - self.prefix_len;
113116
let self_prefix = NetworkEndian::read_u32(self.address.as_bytes()) >> shift;
114117
let addr_prefix = NetworkEndian::read_u32(addr.as_bytes()) >> shift;
@@ -832,5 +835,8 @@ mod test {
832835
|&(a, p)| Cidr::new(Address::new(a[0], a[1], a[2], a[3]), p)) {
833836
assert!(!cidr.contains_subnet(&subnet));
834837
}
838+
839+
let cidr_without_prefix = Cidr::new(cidr.address(), 0);
840+
assert!(cidr_without_prefix.contains_addr(&Address::new(127, 0, 0, 1)));
835841
}
836842
}

0 commit comments

Comments
 (0)
Please sign in to comment.