File limit-decompressed-name-length.patch of Package ruby2.5.40636

diff -ru ruby-2.5.9.old/lib/resolv.rb ruby-2.5.9/lib/resolv.rb
--- ruby-2.5.9.old/lib/resolv.rb	2025-09-12 14:31:45.616180261 +0200
+++ ruby-2.5.9/lib/resolv.rb	2025-09-12 14:41:39.789565603 +0200
@@ -1631,6 +1631,7 @@
           prev_index = @index
           save_index = nil
           d = []
+          size = -1
           while true
             raise DecodeError.new("limit exceeded") if @limit <= @index
             case @data.getbyte(@index)
@@ -1651,7 +1652,10 @@
               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 -ru ruby-2.5.9.old/test/resolv/test_dns.rb ruby-2.5.9/test/resolv/test_dns.rb
--- ruby-2.5.9.old/test/resolv/test_dns.rb	2025-09-12 14:31:45.847282256 +0200
+++ ruby-2.5.9/test/resolv/test_dns.rb	2025-09-12 14:32:26.252953016 +0200
@@ -248,6 +248,13 @@
     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
openSUSE Build Service is sponsored by