summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Bond <b4ldr@users.noreply.github.com>2023-11-22 11:35:22 +0100
committergit <svn-admin@ruby-lang.org>2023-11-22 10:35:36 +0000
commit9e24d747ffbc1040d93ac53bff0c1ef0914419c8 (patch)
treed778b42446ae304ec59bd5f65b545aca6f216d92
parent6391ae9ebc0b7a6668e57aa9f3c7b76ff83fab70 (diff)
[ruby/resolv] IPv6: update to_s method to be RFC5952 compliant
(https://github.com/ruby/resolv/pull/25) * IPv6: update to_s method to be RFC5952 compliant I noticed that the resolv library does not honour RFC 5952 Section 4.2.2. in relation to textural representation of ipv6 addresses: The symbol "::" MUST NOT be used to shorten just one 16-bit 0 field. For example, the representation 2001:db8:0:1:1:1:1:1 is correct, but 2001:db8::1:1:1:1:1 is not correct. Fixes https://github.com/ruby/resolv/pull/24 https://github.com/ruby/resolv/commit/5efcd6ed70 Co-authored-by: Sorah Fukumori <sora134@gmail.com>
-rw-r--r--lib/resolv.rb6
-rw-r--r--test/resolv/test_dns.rb3
2 files changed, 3 insertions, 6 deletions
diff --git a/lib/resolv.rb b/lib/resolv.rb
index 47c4ef6b3b..0db6cc5c59 100644
--- a/lib/resolv.rb
+++ b/lib/resolv.rb
@@ -2560,11 +2560,7 @@ class Resolv
attr_reader :address
def to_s # :nodoc:
- address = sprintf("%x:%x:%x:%x:%x:%x:%x:%x", *@address.unpack("nnnnnnnn"))
- unless address.sub!(/(^|:)0(:0)+(:|$)/, '::')
- address.sub!(/(^|:)0(:|$)/, '::')
- end
- return address
+ sprintf("%x:%x:%x:%x:%x:%x:%x:%x", *@address.unpack("nnnnnnnn")).sub(/(^|:)0(:0)+(:|$)/, '::')
end
def inspect # :nodoc:
diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb
index 9d243bbf50..d9db8408fd 100644
--- a/test/resolv/test_dns.rb
+++ b/test/resolv/test_dns.rb
@@ -374,7 +374,8 @@ class TestResolvDNS < Test::Unit::TestCase
["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"],
+ ["2001:db8:0:1:1:1:1:1", "2001:db8:0:1:1:1:1:1"], # RFC 5952 Section 4.2.2.
+ ["2001:db8::1:1:1:1", "2001:db8:0:0: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"],
]