Bug #14612
closedIPv6 address inconsistency (downcase vs. upcase)
Description
I've noticed that sometimes ip addresses re shown using a-f characters in downcase, other times upcase. Here is a small script to show results:
require "resolv"
require "socket"
puts TCPSocket.getaddress("nghttp2.org") #=> "2400:8902::f03c:91ff:fe69:a454"
puts Resolv.getaddresses("nghttp2.org") #=> ["139.162.123.134", "2400:8902::F03C:91FF:FE69:A454"]
Results might be system-dependent (I'm using Mac OS High Sierra).
This makes compare operations a bit harder.
Files
Updated by shevegen (Robert A. Heiler) over 6 years ago
Is there a standard that mandates or prefers either variant?
If not then perhaps ruby should decide on which variant to
prefer.
Updated by hugopeixoto (Hugo Peixoto) over 6 years ago
- File resolv-ipv6-to_s.patch resolv-ipv6-to_s.patch added
shevegen (Robert A. Heiler) wrote:
Is there a standard that mandates or prefers either variant?
RFC 5952 recommends the usage of lower case letters: https://tools.ietf.org/html/rfc5952#section-4.3
The Resolv
module seems to be formatting the addresses in uppercase:
Resolv::IPv6.create("2400:8902::f03c:91ff:fe69:a454").to_s #=> "2400:8902::F03C:91FF:FE69:A454"
After the patch, Resolv#getaddresses
now formats addresses in lowercase:
Resolv.getaddresses("nghttp2.org") #=> ["139.162.123.134", "2400:8902::f03c:91ff:fe69:a454"]
I noticed there's an ipaddr
module that handles formatting as well, so in the attached patch I am using IPAddr#new
to reuse the existing code. I also added some tests.
I am not sure if adding the dependency here is the right way to do it.
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- File resolv-ipv6-lowercase.patch resolv-ipv6-lowercase.patch added
- Status changed from Open to Assigned
- Assignee set to akr (Akira Tanaka)
I agree that Ruby should consistently use lowercase for IPv6 addresses. However, I don't think we should introduce a dependency on ipaddr
to resolv
. For one, it changes how the IPv6 addresses with noncontiguous 0 components are displayed. Attached a simpler patch that just uses %x
instead of %X
in sprintf.
Updated by akr (Akira Tanaka) over 5 years ago
- Status changed from Assigned to Closed
Applied in changeset git|1da3a31a5f0211db121e0df4ca456838a437537f.
Use lowercase letters for IPv6 addresses.
Reported by chucke (Tiago Cardoso).
Patch by jeremyevans0 (Jeremy Evans).
[Bug #14612]