[ruby/digest] Abort loading if being loaded by gem/bundle pre Ruby 3.0.3

https://github.com/ruby/digest/commit/efd76821b8
This commit is contained in:
Akinori MUSHA 2021-10-26 14:53:43 +09:00 коммит произвёл Hiroshi SHIBATA
Родитель fed65e6a48
Коммит 625cffc808
1 изменённых файлов: 12 добавлений и 14 удалений

Просмотреть файл

@ -1,24 +1,22 @@
# frozen_string_literal: false
# The gem and bundle commands (except for bundle exec) first load
# digest via openssl and then load gems, so if this is installed via
# gem, we are overwriting the default version of digest. Beware not
# to break it or cause redefinition warnings.
#
# When we introduce incompatible changes and overwriting is not an
# option, and given that the default version does not have security
# defects, we may just give up and let those commands just use the
# default version of digest.
#
# return if defined?(Digest) && caller_locations.any? { |l|
# %r{/(rubygems/gem_runner|bundler/cli)\.rb}.match?(l.path)
# }
if defined?(Digest) &&
/\A(?:2\.|3\.0\.[0-2]\z)/.match?(RUBY_VERSION) &&
caller_locations.any? { |l|
%r{/(rubygems/gem_runner|bundler/cli)\.rb}.match?(l.path)
}
# Before Ruby 3.0.3/3.1.0, the gem and bundle commands used to load
# the digest library before loading additionally installed gems, so
# you will get constant redefinition warnings and unexpected
# implementation overwriting if we proceed here. Avoid that.
return
end
require 'digest/loader'
module Digest
# A mutex for Digest().
REQUIRE_MUTEX ||= Thread::Mutex.new
REQUIRE_MUTEX = Thread::Mutex.new
def self.const_missing(name) # :nodoc:
case name