Bug #8464
closedIPAddr cannot parse link-local IPv6 address.
Description
1.9.3p374 :001 > require 'ipaddr'
=> true
1.9.3p374 :002 > IPAddr.new("0:0:0:0:0:0:0:1%0")
ArgumentError: invalid address
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/ipaddr.rb:559:in in6_addr' from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/ipaddr.rb:496:in
initialize'
from (irb):2:in new' from (irb):2 from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in
'
Same behavior in Ruby 1.9.3 all patch levels
Updated by cedric.brancourt (Cedric Brancourt) over 11 years ago
Not sure this need a fix.
The %0 part of the example is the scope ( zone ) and should not be part of the address.
It is appended by operating system in the textual representation of the endpoint ( for interface identification ), and format depend on the operating system.
But it is not part of the address , see http://www.ietf.org/rfc/rfc4007.txt
This is the way I understand it. If I am right , this is not a bug.
Updated by knu (Akinori MUSHA) over 11 years ago
- Category set to lib
- Status changed from Open to Feedback
- Assignee set to knu (Akinori MUSHA)
IPAddr currently does not support scope ID's.
Making IPAddr deal with scope ID's would mean a lot more than just ignoring it (starting with adding #scope_id).
If you are going to request such a feature, you'll have to investigate, for example, in what contexts (libraries/methods/commands) an IPv6 address with a scope ID is valid and accepted, if #to_s should include it or another method should be added for that, how it would affect the backward compatibility, etc.
On the other hand, you can use str.sub(/%.*/m, '')
or str[/[^%]*/m]
if you just want to drop the scope ID part.
Updated by drbrain (Eric Hodel) over 11 years ago
Thanks to the recently added Socket.getifaddrs we now have the ability to map scope names to interface ids for use in IPv6 multicast, for example.
Updated by knu (Akinori MUSHA) about 7 years ago
- Status changed from Feedback to Rejected
- Backport deleted (
1.9.3: UNKNOWN, 2.0.0: UNKNOWN)
Closing due to feedback timeout.