Add latest changes from gitlab-org/security/gitlab@16-3-stable-ee
This commit is contained in:
parent
54118a15ad
commit
80fcab539b
|
|
@ -0,0 +1,3 @@
|
|||
development:
|
||||
unique_cookie_key_postfix: true
|
||||
cookie_key: "_gitlab_session"
|
||||
|
|
@ -5,6 +5,7 @@ module Gitlab
|
|||
module Components
|
||||
class InstancePath
|
||||
include Gitlab::Utils::StrongMemoize
|
||||
include ::Gitlab::LoopHelpers
|
||||
|
||||
LATEST_VERSION_KEYWORD = '~latest'
|
||||
|
||||
|
|
@ -60,9 +61,15 @@ module Gitlab
|
|||
# Given a path like "my-org/sub-group/the-project/path/to/component"
|
||||
# find the project "my-org/sub-group/the-project" by looking at all possible paths.
|
||||
def find_project_by_component_path(path)
|
||||
possible_paths = [path]
|
||||
return if path.start_with?('/') # exit early if path starts with `/` or it will loop forever.
|
||||
|
||||
possible_paths = [path]
|
||||
index = nil
|
||||
|
||||
loop_until(limit: 20) do
|
||||
index = path.rindex('/') # find index of last `/` in a path
|
||||
break unless index
|
||||
|
||||
while index = path.rindex('/') # find index of last `/` in a path
|
||||
possible_paths << (path = path[0..index - 1])
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,20 @@ RSpec.describe Gitlab::Ci::Components::InstancePath, feature_category: :pipeline
|
|||
it 'fetches the content' do
|
||||
expect(path.fetch_content!(current_user: user)).to eq(content)
|
||||
end
|
||||
|
||||
shared_examples 'prevents infinite loop' do |prefix|
|
||||
context "when the project path starts with '#{prefix}'" do
|
||||
let(:project_path) { "#{prefix}#{existing_project.full_path}" }
|
||||
|
||||
it 'returns nil' do
|
||||
result = path.fetch_content!(current_user: user)
|
||||
expect(result).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it_behaves_like 'prevents infinite loop', '/'
|
||||
it_behaves_like 'prevents infinite loop', '//'
|
||||
end
|
||||
|
||||
context 'when user does not have permissions to download code' do
|
||||
|
|
|
|||
Loading…
Reference in New Issue