diff options
| author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2025-07-08 16:36:33 +0900 |
|---|---|---|
| committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2025-07-09 06:18:51 +0900 |
| commit | 9f00b8872d3e294312c99150f1c34b6b3fa74985 (patch) | |
| tree | 6648f3ec7d34fe11af2fb0107656ecb8e25bd20d | |
| parent | bd7d210d1c33d78a364d18f0c346bb63e69bb6ad (diff) | |
Bump up resolv-0.2.3 for Ruby 3.2
| -rw-r--r-- | lib/resolv.gemspec | 2 | ||||
| -rw-r--r-- | lib/resolv.rb | 6 | ||||
| -rw-r--r-- | test/resolv/test_dns.rb | 7 |
3 files changed, 13 insertions, 2 deletions
diff --git a/lib/resolv.gemspec b/lib/resolv.gemspec index db256dc1b0..f221010ab6 100644 --- a/lib/resolv.gemspec +++ b/lib/resolv.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |spec| spec.name = "resolv" - spec.version = "0.2.2" + spec.version = "0.2.3" spec.authors = ["Tanaka Akira"] spec.email = ["akr@fsij.org"] diff --git a/lib/resolv.rb b/lib/resolv.rb index 61c9c7d5cf..eaea69bfd5 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -1624,6 +1624,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) @@ -1644,7 +1645,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 9d243bbf50..93a7042fa9 100644 --- a/test/resolv/test_dns.rb +++ b/test/resolv/test_dns.rb @@ -416,6 +416,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 |
