Project

General

Profile

Bug #14612

IPv6 address inconsistency (downcase vs. upcase)

Added by chucke (Tiago Cardoso) 7 months ago. Updated 7 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:86170]

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.

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

History

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

Is there a standard that mandates or prefers either variant?

If not then perhaps ruby should decide on which variant to
prefer.

#2 [ruby-core:86243] Updated by hugopeixoto (Hugo Peixoto) 7 months 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: 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.

Also available in: Atom PDF