From 51d0de2df2c218a62d1133915a89b2c3703e8dbc Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Thu, 20 Jun 2019 10:52:42 -0700 Subject: [PATCH] Make Resolv::IPv6 addresses use lowercase instead of uppercase Lowercase is required by RFC 5952 section 4.3, and other places in Ruby use lowercase for IPv6 addresses. Based on a patch from Tiago Cardoso Fixes [Bug #14612] --- lib/resolv.rb | 2 +- test/resolv/test_dns.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/resolv.rb b/lib/resolv.rb index 099c7406f3..148fef9ab7 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -2530,7 +2530,7 @@ def initialize(address) # :nodoc: attr_reader :address def to_s # :nodoc: - address = sprintf("%X:%X:%X:%X:%X:%X:%X:%X", *@address.unpack("nnnnnnnn")) + address = sprintf("%x:%x:%x:%x:%x:%x:%x:%x", *@address.unpack("nnnnnnnn")) unless address.sub!(/(^|:)0(:0)+(:|$)/, '::') address.sub!(/(^|:)0(:|$)/, '::') end diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb index fe1ab6ce79..d69bec8256 100644 --- a/test/resolv/test_dns.rb +++ b/test/resolv/test_dns.rb @@ -216,6 +216,22 @@ def test_ipv6_create assert_instance_of Resolv::IPv6, Resolv::IPv6.create('::1:127.0.0.1'), ref end + def test_ipv6_to_s + test_cases = [ + ["2001::abcd:abcd:abcd", "2001::ABcd:abcd:ABCD"], + ["2001:db8::1", "2001:db8::0:1"], + ["::", "0:0:0:0:0:0:0:0"], + ["2001::", "2001::0"], + ["2001:db8::1:1:1:1:1", "2001:db8:0:1:1:1:1:1"], + ["1::1:0:0:0:1", "1:0:0:1:0:0:0:1"], + ["1::1:0:0:1", "1:0:0:0:1:0:0:1"], + ] + + test_cases.each do |expected, ipv6| + assert_equal expected, Resolv::IPv6.create(ipv6).to_s + end + end + def test_ipv6_should_be_16 ref = '[rubygems:1626]' -- 2.21.0