diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | lib/ipaddr.rb | 13 | ||||
-rw-r--r-- | test/test_ipaddr.rb | 9 |
4 files changed, 32 insertions, 5 deletions
@@ -1,3 +1,13 @@ +Sat Nov 5 22:50:13 2016 Akinori MUSHA <knu@iDaemons.org> + + * lib/ipaddr.rb (IPAddr#==): If coercion fails, return false + instead of passing through the exception. [ruby-core:77451] + [Bug #12799] + + * lib/ipaddr.rb (IPAddr#<=>): If coercion fails, return nil + instead of passing through the exception. [ruby-core:77451] + [Bug #12799] + Sat Nov 5 22:11:33 2016 Kazuki Tsujimoto <kazuki@callcc.net> * vm_trace.c (tracepoint_attr_callee_id, rb_tracearg_callee_id): @@ -181,6 +181,11 @@ with all sufficient information, see the ChangeLog file or Redmine * Add a liberal_parsing option. [Feature #11839] +* IPAddr + + * IPAddr#== and IPAddr#<=> no longer raise an exception if coercion fails. + [Bug #12799] + * Logger * Allow specifying logger parameters in constructor such diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb index 458be58577..6f70ebf773 100644 --- a/lib/ipaddr.rb +++ b/lib/ipaddr.rb @@ -149,7 +149,10 @@ class IPAddr # Returns true if two ipaddrs are equal. def ==(other) other = coerce_other(other) - return @family == other.family && @addr == other.to_i + rescue + false + else + @family == other.family && @addr == other.to_i end # Returns a new ipaddr built by masking IP address with the given @@ -335,10 +338,10 @@ class IPAddr # Compares the ipaddr with another. def <=>(other) other = coerce_other(other) - - return nil if other.family != @family - - return @addr <=> other.to_i + rescue + nil + else + @addr <=> other.to_i if other.family == @family end include Comparable diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb index b9209f72d9..86482a08bd 100644 --- a/test/test_ipaddr.rb +++ b/test/test_ipaddr.rb @@ -169,6 +169,8 @@ class TC_Operator < Test::Unit::TestCase @a = IPAddr.new("3ffe:505:2::/48") @b = IPAddr.new("0:0:0:1::") @c = IPAddr.new(IN6MASK32) + @inconvertible_range = 1..5 + @inconvertible_string = "sometext" end alias set_up setup @@ -220,6 +222,13 @@ class TC_Operator < Test::Unit::TestCase assert_equal(false, @a == IPAddr.new("3ffe:505:3::")) assert_equal(true, @a != IPAddr.new("3ffe:505:3::")) assert_equal(false, @a != IPAddr.new("3ffe:505:2::")) + assert_equal(false, @a == @inconvertible_range) + assert_equal(false, @a == @inconvertible_string) + end + + def test_compare + assert_equal(nil, @a <=> @inconvertible_range) + assert_equal(nil, @a <=> @inconvertible_string) end def test_mask |