Bug #11864
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
Hello, While working on a DNS related project I noticed that Resolv's `getaddresses()` getaddresses() and `getaddress()` getaddress() functions will incorrectly accepts an empty `String` String and additionally returns a cached record if a new IRB session is invoked. `Resolv` Resolv correctly rejects nil or empty arguments, but I believe the issue here is that the validation of `String` String should require at a minimum a single valid String character. Here is an example of what I mean: ~~~ruby $ irb irb(main):001:0> RUBY_VERSION => "2.2.3" irb(main):002:0> require 'resolv' => true irb(main):003:0> Resolv.getaddresses("surkatty.org") => ["54.244.9.126"] irb(main):004:0> Resolv.getaddresses("example.com") => ["93.184.216.34"] irb(main):005:0> Resolv.getaddresses("NX") => [] irb(main):006:0> Resolv.getaddresses("") => ["54.244.9.126"] irb(main):007:0> Resolv.getaddresses() ArgumentError: wrong number of arguments (0 for 1) from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/resolv.rb:48:in `getaddresses' from (irb):7 from /usr/local/bin/irb:11:in `<main>' irb(main):008:0> ~~~ On line 006:0, I would have expected `Resolv.getaddresses("")` Resolv.getaddresses("") to return either: 1. Raise an `ArgumentError` ArgumentError or some other indicating an invalid `String` String was passed 2. Return an empty `Array` Array I've also attached a screenshot from my commandline showing the output between IRB sessions as well.