diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb index 369f2c743e..60f4d18712 100644 --- a/lib/rubygems/core_ext/kernel_require.rb +++ b/lib/rubygems/core_ext/kernel_require.rb @@ -43,18 +43,18 @@ module Kernel # https://github.com/rubygems/rubygems/pull/1868 resolved_path = begin rp = nil - Gem.suffixes.each do |s| - $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - next - end - rescue SecurityError - RUBYGEMS_ACTIVATION_MONITOR.exit - raise + $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + next end + rescue SecurityError + RUBYGEMS_ACTIVATION_MONITOR.exit + raise + end + Gem.suffixes.each do |s| full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) if File.file?(full_path) rp = full_path @@ -67,8 +67,12 @@ module Kernel end if resolved_path - RUBYGEMS_ACTIVATION_MONITOR.exit - return gem_original_require(resolved_path) + begin + RUBYGEMS_ACTIVATION_MONITOR.exit + return gem_original_require(resolved_path) + rescue LoadError + RUBYGEMS_ACTIVATION_MONITOR.enter + end end if spec = Gem.find_unresolved_default_spec(path) diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb index b674ff5f6d..49fe7f96c6 100644 --- a/test/rubygems/test_require.rb +++ b/test/rubygems/test_require.rb @@ -120,24 +120,6 @@ class TestGemRequire < Gem::TestCase Object.send :remove_const, :HELLO if Object.const_defined? :HELLO end - def test_dash_i_respects_default_library_extension_priority - skip "extensions don't quite work on jruby" if Gem.java_platform? - - dash_i_ext_arg = util_install_extension_file('a') - dash_i_lib_arg = util_install_ruby_file('a') - - lp = $LOAD_PATH.dup - - begin - $LOAD_PATH.unshift dash_i_lib_arg - $LOAD_PATH.unshift dash_i_ext_arg - assert_require 'a' - assert_match(/a\.rb$/, $LOADED_FEATURES.last) - ensure - $LOAD_PATH.replace lp - end - end - def test_concurrent_require Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) Object.const_set :FILE_EXIT_LATCH, Latch.new(1) @@ -559,48 +541,4 @@ class TestGemRequire < Gem::TestCase $VERBOSE = old_verbose end - def util_install_extension_file(name) - spec = quick_gem name - util_build_gem spec - - spec.extensions << "extconf.rb" - write_file File.join(@tempdir, "extconf.rb") do |io| - io.write <<-RUBY - require "mkmf" - create_makefile("#{name}") - RUBY - end - - write_file File.join(@tempdir, "#{name}.c") do |io| - io.write <<-C - #include - void Init_#{name}() { } - C - end - - spec.files += ["extconf.rb", "#{name}.c"] - - so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") - refute_path_exists so - - path = Gem::Package.build spec - installer = Gem::Installer.at path - installer.install - assert_path_exists so - - spec.gem_dir - end - - def util_install_ruby_file(name) - dir_lib = Dir.mktmpdir("test_require_lib", @tempdir) - dash_i_lib_arg = File.join dir_lib - - a_rb = File.join dash_i_lib_arg, "#{name}.rb" - - FileUtils.mkdir_p File.dirname a_rb - File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" } - - dash_i_lib_arg - end - end