[前][次][番号順一覧][スレッド一覧]

ruby-changes:71113

From: Hiroshi <ko1@a...>
Date: Tue, 8 Feb 2022 00:14:46 +0900 (JST)
Subject: [ruby-changes:71113] 73159727ed (ruby_3_1): Merge ipaddr-1.2.4 (#5526)

https://git.ruby-lang.org/ruby.git/commit/?id=73159727ed

From 73159727ed88a8f739038984c847bb7313336450 Mon Sep 17 00:00:00 2001
From: Hiroshi SHIBATA <hsbt@r...>
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 @@ https://github.com/ruby/ruby/blob/trunk/lib/ipaddr.gemspec#L3
 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@i...", "ume@m..."]
 
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' https://github.com/ruby/ruby/blob/trunk/lib/ipaddr.rb#L40
 #   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 https://github.com/ruby/ruby/blob/trunk/lib/ipaddr.rb#L411
       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 https://github.com/ruby/ruby/blob/trunk/lib/ipaddr.rb#L510
     @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 https://github.com/ruby/ruby/blob/trunk/lib/ipaddr.rb#L583
   # 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 https://github.com/ruby/ruby/blob/trunk/test/test_ipaddr.rb#L255
     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 https://github.com/ruby/ruby/blob/trunk/test/test_ipaddr.rb#L382
 
   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.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]