summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2022-02-08 00:14:27 +0900
committerGitHub <noreply@github.com>2022-02-08 00:14:27 +0900
commit73159727ed88a8f739038984c847bb7313336450 (patch)
treee96e7fb80b606ed8bb22ab24f04c16aabe95b8a5
parent807dd0479267a067e8208a2053b446fa13a2e66f (diff)
Merge ipaddr-1.2.4 (#5526)
[Bug #18570]
-rw-r--r--lib/ipaddr.gemspec6
-rw-r--r--lib/ipaddr.rb7
-rw-r--r--test/test_ipaddr.rb27
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 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
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?)