From 73159727ed88a8f739038984c847bb7313336450 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 8 Feb 2022 00:14:27 +0900 Subject: Merge ipaddr-1.2.4 (#5526) [Bug #18570] --- lib/ipaddr.gemspec | 6 +++++- lib/ipaddr.rb | 7 ++++++- test/test_ipaddr.rb | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/ipaddr.gemspec b/lib/ipaddr.gemspec index 36e2300002..352570a213 100644 --- a/lib/ipaddr.gemspec +++ b/lib/ipaddr.gemspec @@ -3,9 +3,13 @@ lib = File.expand_path("../lib", __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +version = File.foreach(File.expand_path("ipaddr.rb", lib)).find do |line| + /^\s*VERSION\s*=\s*["'](.*)["']/ =~ line and break $1 +end + Gem::Specification.new do |spec| spec.name = "ipaddr" - spec.version = "1.2.3" + spec.version = version spec.authors = ["Akinori MUSHA", "Hajimu UMEMOTO"] spec.email = ["knu@idaemons.org", "ume@mahoroba.org"] diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb index 5df798f5d7..459b8478a0 100644 --- a/lib/ipaddr.rb +++ b/lib/ipaddr.rb @@ -40,6 +40,7 @@ require 'socket' # p ipaddr3 #=> # class IPAddr + VERSION = "1.2.4" # 32 bit mask for IPv4 IN4MASK = 0xffffffff @@ -410,7 +411,7 @@ class IPAddr raise AddressFamilyError, "unsupported address family" end - return clone.set(begin_addr, @family)..clone.set(end_addr, @family) + self.class.new(begin_addr, @family)..self.class.new(end_addr, @family) end # Returns the prefix length in bits for the ipaddr. @@ -509,6 +510,9 @@ class IPAddr @addr = addr if family[0] @family = family[0] + if @family == Socket::AF_INET + @mask_addr &= IN4MASK + end end return self end @@ -579,6 +583,7 @@ class IPAddr # those, such as &, |, include? and ==, accept a string, or a packed # in_addr value instead of an IPAddr object. def initialize(addr = '::', family = Socket::AF_UNSPEC) + @mask_addr = nil if !addr.kind_of?(String) case family when Socket::AF_INET, Socket::AF_INET6 diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb index 2afe749db3..c07ee2a8ee 100644 --- a/test/test_ipaddr.rb +++ b/test/test_ipaddr.rb @@ -255,6 +255,28 @@ class TC_IPAddr < Test::Unit::TestCase assert_equal("1:2:3:4:5:6:7:8%ab0", a.to_s) assert_raise(IPAddr::InvalidAddressError) { a.zone_id = '%' } end + + def test_to_range + a1 = IPAddr.new("127.0.0.1") + range = a1..a1 + assert_equal(range, a1.to_range) + assert_equal(range, a1.freeze.to_range) + + a2 = IPAddr.new("192.168.0.1/16") + range = IPAddr.new("192.168.0.0")..IPAddr.new("192.168.255.255") + assert_equal(range, a2.to_range) + assert_equal(range, a2.freeze.to_range) + + a3 = IPAddr.new("3ffe:505:2::1") + range = a3..a3 + assert_equal(range, a3.to_range) + assert_equal(range, a3.freeze.to_range) + + a4 = IPAddr.new("::ffff/127") + range = IPAddr.new("::fffe")..IPAddr.new("::ffff") + assert_equal(range, a4.to_range) + assert_equal(range, a4.freeze.to_range) + end end class TC_Operator < Test::Unit::TestCase @@ -360,6 +382,11 @@ class TC_Operator < Test::Unit::TestCase 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?) -- cgit v1.2.3