summaryrefslogtreecommitdiff
diff options
-rw-r--r--lib/digest.rb16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/digest.rb b/lib/digest.rb
index b5ff067e44..7cb0d2c318 100644
--- a/lib/digest.rb
+++ b/lib/digest.rb
@@ -1,10 +1,24 @@
# 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)
+# }
+
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