Bug #14612

IPv6 address inconsistency (downcase vs. upcase)

Added by chucke (Tiago Cardoso) about 1 month ago. Updated about 1 month ago.

Target version:


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("") #=> "2400:8902::f03c:91ff:fe69:a454"
puts Resolv.getaddresses("") #=> ["", "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.

resolv-ipv6-to_s.patch (1.48 KB) resolv-ipv6-to_s.patch hugopeixoto (Hugo Peixoto), 03/21/2018 02:27 PM


#1 [ruby-core:86171] Updated by shevegen (Robert A. Heiler) about 1 month ago

Is there a standard that mandates or prefers either variant?

If not then perhaps ruby should decide on which variant to

#2 [ruby-core:86243] Updated by hugopeixoto (Hugo Peixoto) about 1 month ago

shevegen (Robert A. Heiler) wrote:

Is there a standard that mandates or prefers either variant?

RFC 5952 recommends the usage of lower case letters:

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("") #=> ["", "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.

Also available in: Atom PDF