From: knu@...
Date: 2016-11-05T13:54:04+00:00
Subject: [ruby-core:77972] [Ruby trunk Bug#12799] IPAddr#== throws an exception with objects that can't be converted to IPAddr
Issue #12799 has been updated by Akinori MUSHA.
Committed, thanks!
----------------------------------------
Bug #12799: IPAddr#== throws an exception with objects that can't be converted to IPAddr
https://bugs.ruby-lang.org/issues/12799#change-61306
* Author: Hiroshi SHIBATA
* Status: Closed
* Priority: Normal
* Assignee: Akinori MUSHA
* ruby -v:
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
I accidentally deleted issue #12779. It was created by https://bugs.ruby-lang.org/users/11301
----
Description
IPAddr#== uses IPAddr#coerce_other to attempt to convert the 'other' object into an IPAddr for comparison.
If this conversion fails, an exception is thrown, either 'IPAddr::InvalidAddressError' or a 'NoMethodError' referring to the lack of a 'to_i' function.
I would expect a call to == should only return a true or a false in any circumstances. If the tested object is not an IPAddr then clearly it should be false.
```
IPAddr.new("1.1.1.1")=="sometext"
raises IPAddr::InvalidAddressError: invalid address
"sometext"==IPAddr.new("1.1.1.1")
```
returns false.
This also causes other core functions to fail..
```
ip = IPAddr.new("1.1.1.1")
iprange = IPAddr.new("2.2.2.2") .. IPAddr.new("2.2.2.20")
arr = [ip, iprange]
arr.delete(iprange)
```
Results in NoMethodError: undefined method `to_i' for #Range:0x00000001901748
I have patched this at github https://github.com/ruby/ruby/pull/1435
and produced a diff file from the above pull request, apologies if I have done so incorrectly
----
#1[ruby-core:77365] Updated by Akinori MUSHA 5 days ago
Good point. Would you mind adding a regression test to test/test_ipaddr.rb?
----
#2[ruby-core:77387] Updated by David Sexton 4 days ago
Akinori MUSHA wrote:
>Good point. Would you mind adding a regression test to test/test_ipaddr.rb?
No problem.
I have also noticed the same issue with <=> so have added a patch (and test) for that to return nil
Updates diff is at https://github.com/ruby/ruby/pull/1435.diff
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>