Project

General

Profile

Actions

Bug #11531

closed

IPAddr#== implements wrong logic

Added by panasyuk (Aleksander Panasyuk) about 9 years ago. Updated over 1 year ago.

Status:
Rejected
Target version:
-
[ruby-core:<unknown>]

Description

Description

IPAddr#== should implement the logic of comparison of two IPAddr instances. This generally means that it compares two IP addresses.
Lets look at the code of this method:

https://github.com/ruby/ruby/blob/c8b3f1b470e343e7408ab5883f046b1056d94ccc/lib/ipaddr.rb#L151

return @family == other.family && @addr == other.to_i

It returns the result of comparison of the families and the addresses, but it should also compare the netmask which describes the network where this address is located.
The code below shows the test case for this comparison:
ip1 = IPAddr.new '195.51.100.0/24' ip2 = IPAddr.new '195.51.100.0/26' ip1 == ip2 #=> true
This code shows that two identical IP addresses from different networks are equal. But the result should be false because these addresses are not identical.

Possible solution

Depending on Feature #11210 i would propose following implementation of this method:
def ==(other) other = coerce_other(other) return @family == other.family && @addr == other.to_i && @mask_addr == other.netmask end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0