From 111a49e77e4b05a21bb37942ea2cfc254daa8d92 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 8 Jul 2025 16:39:02 +0900 Subject: [PATCH] Bump up resolv-0.3.1 for Ruby 3.3 --- lib/resolv.rb | 8 ++++++-- test/resolv/test_dns.rb | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/resolv.rb b/lib/resolv.rb index 57fd173750..0f08a0c456 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -37,7 +37,7 @@ end class Resolv - VERSION = "0.3.0" + VERSION = "0.3.1" ## # Looks up the first IP address for +name+. @@ -1655,6 +1655,7 @@ class Resolv prev_index = @index save_index = nil d = [] + size = -1 while true raise DecodeError.new("limit exceeded") if @limit <= @index case @data.getbyte(@index) @@ -1675,7 +1676,10 @@ class Resolv end @index = idx else - d << self.get_label + l = self.get_label + d << l + size += 1 + l.string.bytesize + raise DecodeError.new("name label data exceed 255 octets") if size > 255 end end end diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb index 20c3408cd6..c25026eb4c 100644 --- a/test/resolv/test_dns.rb +++ b/test/resolv/test_dns.rb @@ -589,6 +589,13 @@ class TestResolvDNS < Test::Unit::TestCase assert_operator(2**14, :<, m.to_s.length) end + def test_too_long_address + too_long_address_message = [0, 0, 1, 0, 0, 0].pack("n*") + "\x01x" * 129 + [0, 0, 0].pack("cnn") + assert_raise_with_message(Resolv::DNS::DecodeError, /name label data exceed 255 octets/) do + Resolv::DNS::Message.decode too_long_address_message + end + end + def assert_no_fd_leak socket = assert_throw(self) do |tag| Resolv::DNS.stub(:bind_random_port, ->(s, *) {throw(tag, s)}) do