aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2021-10-07 08:02:46 -0700
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2021-10-11 13:50:54 +0900
commit391d6ab4f7c3070d0c46dbd7496255d8269f6c1f (patch)
tree5a438b590f11fb6a148e338c724bcdec4977b057
parent9a321dd9b2fb929873a6b50b41efdf3bd3119536 (diff)
downloadruby-391d6ab4f7c3070d0c46dbd7496255d8269f6c1f.tar.gz
[ruby/ipaddr] Fix include? and ipv4_mapped to allow drb tests to pass
include? should return false if comparing an IPv4 address to an IPv6 address. ipv4_mapped needs to set the correct netmask on the mapped addresses. https://github.com/ruby/ipaddr/commit/da22ef8e6c
-rw-r--r--lib/ipaddr.rb8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb
index ccf9784dd7..5df798f5d7 100644
--- a/lib/ipaddr.rb
+++ b/lib/ipaddr.rb
@@ -173,8 +173,10 @@ class IPAddr
# p net1.include?(net4) #=> false
# p net4.include?(net1) #=> true
def include?(other)
+ other = coerce_other(other)
+ return false unless other.family == family
range = to_range
- other = coerce_other(other).to_range
+ other = other.to_range
range.begin <= other.begin && range.end >= other.end
end
alias === include?
@@ -316,7 +318,9 @@ class IPAddr
if !ipv4?
raise InvalidAddressError, "not an IPv4 address: #{@addr}"
end
- return self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
+ clone = self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
+ clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
+ clone
end
# Returns a new ipaddr built by converting the native IPv4 address