From: George Koehler Date: 2011-10-24T06:16:36+09:00 Subject: [ruby-core:40294] [ruby-trunk - Bug #5468] IPSocket#valid_v6? in ipaddr.rb contains incorrect regexps Issue #5468 has been updated by George Koehler. =begin 'FF32:00FF:A12:34FF:FE56:7890::/96' is an IPv6 prefix, but Socket::AF_INET means IPv4 address. It works if I say Socket::AF_INET6. $ ruby -v ruby 1.9.4dev (2011-10-18 trunk 33473) [x86_64-openbsd4.9] $ irb irb(main):001:0> require 'ipaddr' => true irb(main):002:0> IPAddr.new('FF32:00FF:A12:34FF:FE56:7890::/96', Socket::AF_INET) ArgumentError: address family mismatch from /home/kernigh/prefix/lib/ruby/1.9.1/ipaddr.rb:510:in `initialize' from (irb):2:in `new' from (irb):2 from /home/kernigh/prefix/bin/irb:12:in `
' irb(main):003:0> IPAddr.new('FF32:00FF:A12:34FF:FE56:7890::/96', Socket::AF_INET6) => # =end ---------------------------------------- Bug #5468: IPSocket#valid_v6? in ipaddr.rb contains incorrect regexps http://redmine.ruby-lang.org/issues/5468 Author: James Harton Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.2 ruby -v: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0] Code to reproduce: require 'ipaddr' IPAddr.new('FF32:00FF:A12:34FF:FE56:7890::/96', Socket::AF_INET) # See RFC4489 Fails with: ArgumentError: invalid address from /Users/jnh/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/ipaddr.rb:477:in `rescue in initialize' from /Users/jnh/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/ipaddr.rb:474:in `initialize' from (irb):2:in `new' from (irb):2 from /Users/jnh/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `
' I have tested on both 1.9.2 and 1.8.7: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0] ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.2.0] Looking over #valid_v6 it appears that it contains a number of invalid regular expressions (IPv4 compatible IPv6 addressing was deprecated by RFC4291 in 2006 for example). I would suggest that all the regular expressions are removed and the operating systems inet_pton() call is used to validate it instead. -- http://redmine.ruby-lang.org