summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-05 13:53:38 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-05 13:53:38 +0000
commit2d8841791facb07155c710d8a7db7b0bf8be0d21 (patch)
tree050e10063c3ceff4fecaeaec4c333fe497e4d6cb
parent9cbd6ee09770be3d73a17ab1195a094c59c9f9ee (diff)
IPAddr#== and IPAddr#<=> no longer raise an exception if coercion fails
* 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--NEWS5
-rw-r--r--lib/ipaddr.rb13
-rw-r--r--test/test_ipaddr.rb9
4 files changed, 32 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index aeda10e39a..75f0bc1acd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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):
diff --git a/NEWS b/NEWS
index 014e2141a0..806dc28fb4 100644
--- a/NEWS
+++ b/NEWS
@@ -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