pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: [pkgsrc-2025Q2] pkgsrc/lang



Module Name:    pkgsrc
Committed By:   maya
Date:           Thu Jul 17 02:45:43 UTC 2025

Modified Files:
        pkgsrc/lang/ruby [pkgsrc-2025Q2]: rubyversion.mk
        pkgsrc/lang/ruby34 [pkgsrc-2025Q2]: Makefile distinfo
Added Files:
        pkgsrc/lang/ruby34/patches [pkgsrc-2025Q2]:
            patch-ext_win32_lib_win32_resolv.rb patch-ext_win32_resolv_resolv.c
            patch-lib_resolv.rb patch-test_resolv_test__dns.rb

Log Message:
Pullup ticket #6988 - requested by taca
lang/ruby34: Security fix

Revisions pulled up:
- lang/ruby/rubyversion.mk                                      1.301
- lang/ruby34/Makefile                                          1.6
- lang/ruby34/distinfo                                          1.8
- lang/ruby34/patches/patch-ext_win32_lib_win32_resolv.rb       1.1
- lang/ruby34/patches/patch-ext_win32_resolv_resolv.c           1.1
- lang/ruby34/patches/patch-lib_resolv.rb                       1.1
- lang/ruby34/patches/patch-test_resolv_test__dns.rb            1.1

---
   Module Name: pkgsrc
   Committed By:        taca
   Date:                Sun Jul 13 15:39:55 UTC 2025

   Modified Files:
        pkgsrc/lang/ruby: rubyversion.mk
        pkgsrc/lang/ruby34: Makefile distinfo
   Added Files:
        pkgsrc/lang/ruby34/patches: patch-ext_win32_lib_win32_resolv.rb
            patch-ext_win32_resolv_resolv.c patch-lib_resolv.rb
            patch-test_resolv_test__dns.rb

   Log Message:
   lang/ruby34: update resolv gem

   Update resolve gem to 0.6.2 to fix security problem of CVE-2025-24294.

   Bump PKGREVISION.


To generate a diff of this commit:
cvs rdiff -u -r1.298.2.2 -r1.298.2.3 pkgsrc/lang/ruby/rubyversion.mk
cvs rdiff -u -r1.5 -r1.5.2.1 pkgsrc/lang/ruby34/Makefile
cvs rdiff -u -r1.7 -r1.7.2.1 pkgsrc/lang/ruby34/distinfo
cvs rdiff -u -r0 -r1.1.2.2 \
    pkgsrc/lang/ruby34/patches/patch-ext_win32_lib_win32_resolv.rb \
    pkgsrc/lang/ruby34/patches/patch-ext_win32_resolv_resolv.c \
    pkgsrc/lang/ruby34/patches/patch-lib_resolv.rb \
    pkgsrc/lang/ruby34/patches/patch-test_resolv_test__dns.rb

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/lang/ruby/rubyversion.mk
diff -u pkgsrc/lang/ruby/rubyversion.mk:1.298.2.2 pkgsrc/lang/ruby/rubyversion.mk:1.298.2.3
--- pkgsrc/lang/ruby/rubyversion.mk:1.298.2.2   Thu Jul 17 02:32:56 2025
+++ pkgsrc/lang/ruby/rubyversion.mk     Thu Jul 17 02:45:42 2025
@@ -1,4 +1,4 @@
-# $NetBSD: rubyversion.mk,v 1.298.2.2 2025/07/17 02:32:56 maya Exp $
+# $NetBSD: rubyversion.mk,v 1.298.2.3 2025/07/17 02:45:42 maya Exp $
 #
 
 # This file determines which Ruby version is used as a dependency for
@@ -494,7 +494,7 @@ RUBY_PSTORE_VER=            0.1.4
 RUBY_RDOC_VER=                 6.10.0
 RUBY_READLINE_VER=             0.0.4
 RUBY_RELINE_VER=               0.6.0
-RUBY_RESOLV_VER=               0.6.0
+RUBY_RESOLV_VER=               0.6.2
 RUBY_RUBY2_KEYWORDS_VER=       0.0.5
 RUBY_SECURERANDOM_VER=         0.4.1
 RUBY_SET_VER=                  1.1.1

Index: pkgsrc/lang/ruby34/Makefile
diff -u pkgsrc/lang/ruby34/Makefile:1.5 pkgsrc/lang/ruby34/Makefile:1.5.2.1
--- pkgsrc/lang/ruby34/Makefile:1.5     Sat Jun 14 06:54:46 2025
+++ pkgsrc/lang/ruby34/Makefile Thu Jul 17 02:45:42 2025
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.5 2025/06/14 06:54:46 taca Exp $
+# $NetBSD: Makefile,v 1.5.2.1 2025/07/17 02:45:42 maya Exp $
 
 DISTNAME=      ${RUBY_DISTNAME}
 PKGNAME=       ${RUBY_PKGPREFIX}-${RUBY_VERSION}
-PKGREVISION=   1
+PKGREVISION=   2
 CATEGORIES=    lang ruby
 MASTER_SITES=  ${MASTER_SITE_RUBY}
 

Index: pkgsrc/lang/ruby34/distinfo
diff -u pkgsrc/lang/ruby34/distinfo:1.7 pkgsrc/lang/ruby34/distinfo:1.7.2.1
--- pkgsrc/lang/ruby34/distinfo:1.7     Sat Jun 14 06:54:46 2025
+++ pkgsrc/lang/ruby34/distinfo Thu Jul 17 02:45:42 2025
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.7 2025/06/14 06:54:46 taca Exp $
+$NetBSD: distinfo,v 1.7.2.1 2025/07/17 02:45:42 maya Exp $
 
 BLAKE2s (ruby-3.4.4.tar.xz) = b4fa799d30359f9f9b22f403205e49d782e3f78d7496dc5bba16acc8a62d9bec
 SHA512 (ruby-3.4.4.tar.xz) = 0d258cf790daad424c866404b5cbdc8adba0e4e13764847a89adf2335229e5184095c9f3e9594705897697e48bcc322d9a9f919b04047abb2075daca9fce8871
@@ -6,9 +6,12 @@ Size (ruby-3.4.4.tar.xz) = 17255388 byte
 SHA1 (patch-common.mk) = c23eed58427b2fd4ba8fdb3692f609701a666c6d
 SHA1 (patch-configure) = 9df201049bb38188f8409ee4572d3a6bb774013b
 SHA1 (patch-ext_openssl_openssl__missing.h) = 3f8d79736fd14806dfaf76e333eec63ff3ff5890
+SHA1 (patch-ext_win32_lib_win32_resolv.rb) = 7d7d9387523ce92a7924cbf235dcf3fb10d759a4
+SHA1 (patch-ext_win32_resolv_resolv.c) = 3c4217d24c2dc2d27ed5935be778009dd89490f0
 SHA1 (patch-include_ruby_internal_static__assert.h) = 7d5c3ae7ff674b9b34639924fcf08237164de9f8
 SHA1 (patch-lib_mkmf.rb) = ea66bc4e42d2b15edfcd8ceefa9b94d07a3cdd0f
 SHA1 (patch-lib_rdoc_encoding.rb) = 0e82d2942d9bfcb67dc7c994889d7bc5ec2ae85a
+SHA1 (patch-lib_resolv.rb) = ec152623f6f3cdcbf6c47f70f511db431551fd30
 SHA1 (patch-lib_rubygems.rb) = 81af71ae9b0c3fef2ad1de88a542b3ece14b4519
 SHA1 (patch-lib_rubygems_commands_setup__command.rb) = 66c475a5308deb2ed5096b88cf65549732f87421
 SHA1 (patch-lib_rubygems_config__file.rb) = 584f8cd9ef1d1b9bf25efc7e85c2219166db7ac9
@@ -18,6 +21,7 @@ SHA1 (patch-lib_rubygems_installer.rb) =
 SHA1 (patch-lib_rubygems_platform.rb) = bde36a8fc1ba2fbf4d6fb8829bc116fb4d09b404
 SHA1 (patch-lib_rubygems_specification.rb) = a3154185ef89fb33e699dd54b19a8e274f3275e0
 SHA1 (patch-prism_prism.c) = 7f4221b01b4b4b412ba30050a886773b7877403c
+SHA1 (patch-test_resolv_test__dns.rb) = 57cbaff16dcfd1caf6345c8e532974cecf171729
 SHA1 (patch-test_rubygems_test__gem.rb) = 32f7c7d7f8a024c045d78c2bce93944fc3113d04
 SHA1 (patch-thread__pthread.c) = 7c1231933a2d6ce9d56891ab512371841697fbca
 SHA1 (patch-tool_ifchange) = 1803bb6a1836e232dcabcf38f11c9881dbf726ea

Added files:

Index: pkgsrc/lang/ruby34/patches/patch-ext_win32_lib_win32_resolv.rb
diff -u /dev/null pkgsrc/lang/ruby34/patches/patch-ext_win32_lib_win32_resolv.rb:1.1.2.2
--- /dev/null   Thu Jul 17 02:45:43 2025
+++ pkgsrc/lang/ruby34/patches/patch-ext_win32_lib_win32_resolv.rb      Thu Jul 17 02:45:42 2025
@@ -0,0 +1,179 @@
+$NetBSD: patch-ext_win32_lib_win32_resolv.rb,v 1.1.2.2 2025/07/17 02:45:42 maya Exp $
+
+Update resolv gem to 0.6.2.
+
+--- ext/win32/lib/win32/resolv.rb.orig 2025-05-14 03:11:06.000000000 +0000
++++ ext/win32/lib/win32/resolv.rb
+@@ -4,13 +4,8 @@
+ 
+ =end
+ 
+-require 'win32/registry'
+-
+ module Win32
+   module Resolv
+-    API = Registry::API
+-    Error = Registry::Error
+-
+     def self.get_hosts_path
+       path = get_hosts_dir
+       path = File.expand_path('hosts', path)
+@@ -47,89 +42,103 @@ module Win32
+ # Windows NT
+ #====================================================================
+   module Resolv
+-    module SZ
+-      refine Registry do
+-        # ad hoc workaround for broken registry
+-        def read_s(key)
+-          type, str = read(key)
+-          unless type == Registry::REG_SZ
+-            warn "Broken registry, #{name}\\#{key} was #{Registry.type2name(type)}, ignored"
+-            return String.new
++    begin
++      require 'win32/registry'
++      module SZ
++        refine Registry do
++          # ad hoc workaround for broken registry
++          def read_s(key)
++            type, str = read(key)
++            unless type == Registry::REG_SZ
++              warn "Broken registry, #{name}\\#{key} was #{Registry.type2name(type)}, ignored"
++              return String.new
++            end
++            str
+           end
+-          str
+         end
+       end
++      using SZ
++    rescue LoadError
++      require "open3"
+     end
+-    using SZ
+ 
+     TCPIP_NT = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'
+ 
+     class << self
+       private
+       def get_hosts_dir
+-        Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
+-          reg.read_s_expand('DataBasePath')
+-        end
++        get_item_property(TCPIP_NT, 'DataBasePath', expand: true)
+       end
+ 
+       def get_info
+         search = nil
+         nameserver = get_dns_server_list
+-        Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
+-          begin
+-            slist = reg.read_s('SearchList')
+-            search = slist.split(/,\s*/) unless slist.empty?
+-          rescue Registry::Error
+-          end
+ 
+-          if add_search = search.nil?
+-            search = []
+-            begin
+-              nvdom = reg.read_s('NV Domain')
+-              unless nvdom.empty?
+-                @search = [ nvdom ]
+-                if reg.read_i('UseDomainNameDevolution') != 0
+-                  if /^\w+\./ =~ nvdom
+-                    devo = $'
+-                  end
+-                end
++        slist = get_item_property(TCPIP_NT, 'SearchList')
++        search = slist.split(/,\s*/) unless slist.empty?
++
++        if add_search = search.nil?
++          search = []
++          nvdom = get_item_property(TCPIP_NT, 'NV Domain')
++
++          unless nvdom.empty?
++            @search = [ nvdom ]
++            udmnd = get_item_property(TCPIP_NT, 'UseDomainNameDevolution').to_i
++            if udmnd != 0
++              if /^\w+\./ =~ nvdom
++                devo = $'
+               end
+-            rescue Registry::Error
+             end
+           end
++        end
+ 
+-          reg.open('Interfaces') do |h|
+-            h.each_key do |iface, |
+-              h.open(iface) do |regif|
+-                next unless ns = %w[NameServer DhcpNameServer].find do |key|
+-                  begin
+-                    ns = regif.read_s(key)
+-                  rescue Registry::Error
+-                  else
+-                    break ns.split(/[,\s]\s*/) unless ns.empty?
+-                  end
++        ifs = if defined?(Win32::Registry)
++                Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces') do |reg|
++                  reg.keys
++                rescue Registry::Error
++                  []
+                 end
+-                next if (nameserver & ns).empty?
++              else
++                cmd = "Get-ChildItem 'HKLM:\\#{TCPIP_NT}\\Interfaces' | ForEach-Object { $_.PSChildName }"
++                output, _ = Open3.capture2('powershell', '-Command', cmd)
++                output.split(/\n+/)
++              end
+ 
+-                if add_search
+-                  begin
+-                    [ 'Domain', 'DhcpDomain' ].each do |key|
+-                      dom = regif.read_s(key)
+-                      unless dom.empty?
+-                        search.concat(dom.split(/,\s*/))
+-                        break
+-                      end
+-                    end
+-                  rescue Registry::Error
+-                  end
+-                end
++        ifs.each do |iface|
++          next unless ns = %w[NameServer DhcpNameServer].find do |key|
++            ns = get_item_property(TCPIP_NT + '\Interfaces' + "\\#{iface}", key)
++            break ns.split(/[,\s]\s*/) unless ns.empty?
++          end
++
++          next if (nameserver & ns).empty?
++
++          if add_search
++            [ 'Domain', 'DhcpDomain' ].each do |key|
++              dom = get_item_property(TCPIP_NT + '\Interfaces' + "\\#{iface}", key)
++              unless dom.empty?
++                search.concat(dom.split(/,\s*/))
++                break
+               end
+             end
+           end
+-          search << devo if add_search and devo
+         end
++        search << devo if add_search and devo
+         [ search.uniq, nameserver.uniq ]
+       end
++
++      def get_item_property(path, name, expand: false)
++        if defined?(Win32::Registry)
++          Registry::HKEY_LOCAL_MACHINE.open(path) do |reg|
++            expand ? reg.read_s_expand(name) : reg.read_s(name)
++          rescue Registry::Error
++            ""
++          end
++        else
++          cmd = "Get-ItemProperty -Path 'HKLM:\\#{path}' -Name '#{name}' -ErrorAction SilentlyContinue | Select-Object -ExpandProperty '#{name}'"
++          output, _ = Open3.capture2('powershell', '-Command', cmd)
++          output.strip
++        end
++      end
+     end
+   end
+ end
Index: pkgsrc/lang/ruby34/patches/patch-ext_win32_resolv_resolv.c
diff -u /dev/null pkgsrc/lang/ruby34/patches/patch-ext_win32_resolv_resolv.c:1.1.2.2
--- /dev/null   Thu Jul 17 02:45:43 2025
+++ pkgsrc/lang/ruby34/patches/patch-ext_win32_resolv_resolv.c  Thu Jul 17 02:45:43 2025
@@ -0,0 +1,15 @@
+$NetBSD: patch-ext_win32_resolv_resolv.c,v 1.1.2.2 2025/07/17 02:45:43 maya Exp $
+
+Update resolv gem to 0.6.2.
+
+--- ext/win32/resolv/resolv.c.orig     2025-05-14 03:11:06.000000000 +0000
++++ ext/win32/resolv/resolv.c
+@@ -13,6 +13,8 @@ w32error_make_error(DWORD e)
+     return rb_class_new_instance(1, &code, rb_path2class("Win32::Resolv::Error"));
+ }
+ 
++NORETURN(static void w32error_raise(DWORD e));
++
+ static void
+ w32error_raise(DWORD e)
+ {
Index: pkgsrc/lang/ruby34/patches/patch-lib_resolv.rb
diff -u /dev/null pkgsrc/lang/ruby34/patches/patch-lib_resolv.rb:1.1.2.2
--- /dev/null   Thu Jul 17 02:45:43 2025
+++ pkgsrc/lang/ruby34/patches/patch-lib_resolv.rb      Thu Jul 17 02:45:43 2025
@@ -0,0 +1,163 @@
+$NetBSD: patch-lib_resolv.rb,v 1.1.2.2 2025/07/17 02:45:43 maya Exp $
+
+Update resolv gem to 0.6.2.
+
+--- lib/resolv.rb.orig 2025-05-14 03:11:06.000000000 +0000
++++ lib/resolv.rb
+@@ -33,7 +33,7 @@ require 'securerandom'
+ 
+ class Resolv
+ 
+-  VERSION = "0.6.0"
++  VERSION = "0.6.2"
+ 
+   ##
+   # Looks up the first IP address for +name+.
+@@ -173,13 +173,16 @@ class Resolv
+ 
+   class ResolvTimeout < Timeout::Error; end
+ 
++  WINDOWS = /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM || ::RbConfig::CONFIG['host_os'] =~ /mswin/
++  private_constant :WINDOWS
++
+   ##
+   # Resolv::Hosts is a hostname resolver that uses the system hosts file.
+ 
+   class Hosts
+-    if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM and
++    if WINDOWS
+       begin
+-        require 'win32/resolv'
++        require 'win32/resolv' unless defined?(Win32::Resolv)
+         DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
+       rescue LoadError
+       end
+@@ -659,8 +662,20 @@ class Resolv
+       }
+     end
+ 
+-    def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
+-      begin
++    case RUBY_PLATFORM
++    when *[
++      # https://www.rfc-editor.org/rfc/rfc6056.txt
++      # Appendix A. Survey of the Algorithms in Use by Some Popular Implementations
++      /freebsd/, /linux/, /netbsd/, /openbsd/, /solaris/,
++      /darwin/, # the same as FreeBSD
++    ] then
++      def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
++        udpsock.bind(bind_host, 0)
++      end
++    else
++      # Sequential port assignment
++      def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
++        # Ephemeral port number range recommended by RFC 6056
+         port = random(1024..65535)
+         udpsock.bind(bind_host, port)
+       rescue Errno::EADDRINUSE, # POSIX
+@@ -983,13 +998,13 @@ class Resolv
+             next unless keyword
+             case keyword
+             when 'nameserver'
+-              nameserver.concat(args)
++              nameserver.concat(args.each(&:freeze))
+             when 'domain'
+               next if args.empty?
+-              search = [args[0]]
++              search = [args[0].freeze]
+             when 'search'
+               next if args.empty?
+-              search = args
++              search = args.each(&:freeze)
+             when 'options'
+               args.each {|arg|
+                 case arg
+@@ -1000,22 +1015,22 @@ class Resolv
+             end
+           }
+         }
+-        return { :nameserver => nameserver, :search => search, :ndots => ndots }
++        return { :nameserver => nameserver.freeze, :search => search.freeze, :ndots => ndots.freeze }.freeze
+       end
+ 
+       def Config.default_config_hash(filename="/etc/resolv.conf")
+         if File.exist? filename
+-          config_hash = Config.parse_resolv_conf(filename)
++          Config.parse_resolv_conf(filename)
++        elsif WINDOWS
++          require 'win32/resolv' unless defined?(Win32::Resolv)
++          search, nameserver = Win32::Resolv.get_resolv_info
++          config_hash = {}
++          config_hash[:nameserver] = nameserver if nameserver
++          config_hash[:search] = [search].flatten if search
++          config_hash
+         else
+-          if /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
+-            require 'win32/resolv'
+-            search, nameserver = Win32::Resolv.get_resolv_info
+-            config_hash = {}
+-            config_hash[:nameserver] = nameserver if nameserver
+-            config_hash[:search] = [search].flatten if search
+-          end
++          {}
+         end
+-        config_hash || {}
+       end
+ 
+       def lazy_initialize
+@@ -1664,6 +1679,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)
+@@ -1684,7 +1700,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
+@@ -2110,7 +2129,14 @@ class Resolv
+ 
+       attr_reader :ttl
+ 
+-      ClassHash = {} # :nodoc:
++      ClassHash = Module.new do
++        module_function
++
++        def []=(type_class_value, klass)
++          type_value, class_value = type_class_value
++          Resource.const_set(:"Type#{type_value}_Class#{class_value}", klass)
++        end
++      end
+ 
+       def encode_rdata(msg) # :nodoc:
+         raise NotImplementedError.new
+@@ -2148,7 +2174,9 @@ class Resolv
+       end
+ 
+       def self.get_class(type_value, class_value) # :nodoc:
+-        return ClassHash[[type_value, class_value]] ||
++        cache = :"Type#{type_value}_Class#{class_value}"
++
++        return (const_defined?(cache) && const_get(cache)) ||
+                Generic.create(type_value, class_value)
+       end
+ 
+@@ -2577,7 +2605,7 @@ class Resolv
+         end
+ 
+         ##
+-        # Flags for this proprty:
++        # Flags for this property:
+         # - Bit 0 : 0 = not critical, 1 = critical
+ 
+         attr_reader :flags
Index: pkgsrc/lang/ruby34/patches/patch-test_resolv_test__dns.rb
diff -u /dev/null pkgsrc/lang/ruby34/patches/patch-test_resolv_test__dns.rb:1.1.2.2
--- /dev/null   Thu Jul 17 02:45:43 2025
+++ pkgsrc/lang/ruby34/patches/patch-test_resolv_test__dns.rb   Thu Jul 17 02:45:43 2025
@@ -0,0 +1,20 @@
+$NetBSD: patch-test_resolv_test__dns.rb,v 1.1.2.2 2025/07/17 02:45:43 maya Exp $
+
+Update resolv gem to 0.6.2.
+
+--- test/resolv/test_dns.rb.orig       2025-05-14 03:11:06.000000000 +0000
++++ test/resolv/test_dns.rb
+@@ -627,6 +627,13 @@ class TestResolvDNS < Test::Unit::TestCa
+     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



Home | Main Index | Thread Index | Old Index