From af485192f326ddf91537e4543a69f2d7a9e6e198 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Thu, 2 Dec 2021 10:56:39 +0100 Subject: [PATCH] Ipaddr#native must also coerce `@mask_addr` Before it would be left as an IPv6 mask causing `to_range` to fail. ``` >> IPAddr.new("::2").native.to_range /opt/rubies/3.0.3/lib/ruby/3.0.0/ipaddr.rb:479:in `set': invalid address (IPAddr::InvalidAddressError) ``` --- lib/ipaddr.rb | 3 +++ test/test_ipaddr.rb | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb index 5df798f..5876a4a 100644 --- a/lib/ipaddr.rb +++ b/lib/ipaddr.rb @@ -509,6 +509,9 @@ def set(addr, *family) @addr = addr if family[0] @family = family[0] + if @family == Socket::AF_INET + @mask_addr &= IN4MASK + end end return self end diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb index 2afe749..bd16328 100644 --- a/test/test_ipaddr.rb +++ b/test/test_ipaddr.rb @@ -360,6 +360,11 @@ def test_include? end + def test_native_coerce_mask_addr + assert_equal(IPAddr.new("0.0.0.2/255.255.255.255"), IPAddr.new("::2").native) + assert_equal(IPAddr.new("0.0.0.2/255.255.255.255").to_range, IPAddr.new("::2").native.to_range) + end + def test_loopback? assert_equal(true, IPAddr.new('127.0.0.1').loopback?) assert_equal(true, IPAddr.new('127.127.1.1').loopback?)