[ruby/resolv] config read from file should return frozen data!

https://github.com/ruby/resolv/commit/afb57f40a1
This commit is contained in:
HoneyryderChuck 2024-10-29 14:43:55 +00:00 committed by git
parent 756479324f
commit 54a85caed4

View File

@ -998,13 +998,13 @@ class Resolv
next unless keyword next unless keyword
case keyword case keyword
when 'nameserver' when 'nameserver'
nameserver.concat(args) nameserver.concat(args.each(&:freeze))
when 'domain' when 'domain'
next if args.empty? next if args.empty?
search = [args[0]] search = [args[0].freeze]
when 'search' when 'search'
next if args.empty? next if args.empty?
search = args search = args.each(&:freeze)
when 'options' when 'options'
args.each {|arg| args.each {|arg|
case arg case arg
@ -1015,23 +1015,23 @@ class Resolv
end end
} }
} }
return { :nameserver => nameserver, :search => search, :ndots => ndots } return { :nameserver => nameserver.freeze, :search => search.freeze, :ndots => ndots.freeze }.freeze
end end
def Config.default_config_hash(filename="/etc/resolv.conf") def Config.default_config_hash(filename="/etc/resolv.conf")
if File.exist? filename if File.exist? filename
config_hash = Config.parse_resolv_conf(filename) Config.parse_resolv_conf(filename)
else elsif WINDOWS
if WINDOWS
require 'win32/resolv' unless defined?(Win32::Resolv) require 'win32/resolv' unless defined?(Win32::Resolv)
search, nameserver = Win32::Resolv.get_resolv_info search, nameserver = Win32::Resolv.get_resolv_info
config_hash = {} config_hash = {}
config_hash[:nameserver] = nameserver if nameserver config_hash[:nameserver] = nameserver if nameserver
config_hash[:search] = [search].flatten if search config_hash[:search] = [search].flatten if search
config_hash
else
{}
end end
end end
config_hash || {}
end
def lazy_initialize def lazy_initialize
@mutex.synchronize { @mutex.synchronize {