summaryrefslogtreecommitdiff
path: root/ext/digest/lib/digest.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ext/digest/lib/digest.rb')
-rw-r--r--ext/digest/lib/digest.rb27
1 files changed, 13 insertions, 14 deletions
diff --git a/ext/digest/lib/digest.rb b/ext/digest/lib/digest.rb
index 7cb0d2c318..e995adb450 100644
--- a/ext/digest/lib/digest.rb
+++ b/ext/digest/lib/digest.rb
@@ -1,24 +1,23 @@
# 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/version'
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