From 4aca77edde91f826aa243e268bf1ef5214530583 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 8 Dec 2020 16:33:39 +0900 Subject: Merge prepare version of RubyGems 3.2.0 --- lib/rubygems/source.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'lib/rubygems/source.rb') diff --git a/lib/rubygems/source.rb b/lib/rubygems/source.rb index ef232ff35d..891cc3e644 100644 --- a/lib/rubygems/source.rb +++ b/lib/rubygems/source.rb @@ -79,7 +79,7 @@ class Gem::Source def dependency_resolver_set # :nodoc: return Gem::Resolver::IndexSet.new self if 'file' == uri.scheme - bundler_api_uri = uri + './api/v1/dependencies' + bundler_api_uri = enforce_trailing_slash(uri) + './api/v1/dependencies' begin fetcher = Gem::RemoteFetcher.fetcher @@ -130,7 +130,7 @@ class Gem::Source spec_file_name = name_tuple.spec_name - source_uri = uri + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}" + source_uri = enforce_trailing_slash(uri) + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}" cache_dir = cache_dir source_uri @@ -174,7 +174,7 @@ class Gem::Source file = FILES[type] fetcher = Gem::RemoteFetcher.fetcher file_name = "#{file}.#{Gem.marshal_version}" - spec_path = uri + "#{file_name}.gz" + spec_path = enforce_trailing_slash(uri) + "#{file_name}.gz" cache_dir = cache_dir spec_path local_file = File.join(cache_dir, file_name) retried = false @@ -223,7 +223,13 @@ class Gem::Source def typo_squatting?(host, distance_threshold=4) return if @uri.host.nil? - levenshtein_distance(@uri.host, host) <= distance_threshold + levenshtein_distance(@uri.host, host).between? 1, distance_threshold + end + + private + + def enforce_trailing_slash(uri) + uri.merge(uri.path.gsub(/\/+$/, '') + '/') end end -- cgit v1.2.3