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