diff options
author | Robert Speicher <robert@gitlab.com> | 2016-08-19 18:01:12 +0000 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2016-08-19 18:01:12 +0000 |
commit | daa0cc1cf7805a08dec4c305122998e36c71579e (patch) | |
tree | 3e49e00eadd0f1e39a3c3fa614644745e5515799 | |
parent | eae636edb4f01c7f8902856ca95fce7c8453a541 (diff) | |
parent | bb48a0faea00473c24e77e9e7464392f9de2c4fb (diff) | |
download | gitlab-ce-daa0cc1cf7805a08dec4c305122998e36c71579e.tar.gz |
Merge branch 'directory-names-containing-space' into 'master'
Do not escape URI when extracting path
## What does this MR do?
- remove escaping of URI parameters after they have already been unescaped in `ExtractsPath`
- remove spec that is relying on that behavior
## Why was this MR needed?
- spaces in directory names were escaped leading to 404 errors on repository files page
## What are the relevant issue numbers?
fixes gitlab-com/support-forum#952, #21106
See merge request !5878
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | lib/extracts_path.rb | 12 | ||||
-rw-r--r-- | spec/lib/extracts_path_spec.rb | 21 |
3 files changed, 14 insertions, 20 deletions
diff --git a/CHANGELOG b/CHANGELOG index d78c51fbbc3..f8c82e1ba97 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -30,6 +30,7 @@ v 8.11.0 (unreleased) - Fix CI status icon link underline (ClemMakesApps) - The Repository class is now instrumented - Fix commit mention font inconsistency (ClemMakesApps) + - Do not escape URI when extracting path !5878 (winniehell) - Fix filter label tooltip HTML rendering (ClemMakesApps) - Cache the commit author in RequestStore to avoid extra lookups in PostReceive - Expand commit message width in repo view (ClemMakesApps) diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb index 84688f6646e..a293fa2752f 100644 --- a/lib/extracts_path.rb +++ b/lib/extracts_path.rb @@ -94,7 +94,9 @@ module ExtractsPath @options = params.select {|key, value| allowed_options.include?(key) && !value.blank? } @options = HashWithIndifferentAccess.new(@options) - @id = Addressable::URI.normalize_component(get_id) + @id = params[:id] || params[:ref] + @id += "/" + params[:path] unless params[:path].blank? + @ref, @path = extract_ref(@id) @repo = @project.repository if @options[:extended_sha1].blank? @@ -116,12 +118,4 @@ module ExtractsPath def tree @tree ||= @repo.tree(@commit.id, @path) end - - private - - def get_id - id = params[:id] || params[:ref] - id += "/" + params[:path] unless params[:path].blank? - id - end end diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb index 36c77206a3f..86d04ecfa36 100644 --- a/spec/lib/extracts_path_spec.rb +++ b/spec/lib/extracts_path_spec.rb @@ -30,17 +30,6 @@ describe ExtractsPath, lib: true do expect(@logs_path).to eq("/#{@project.path_with_namespace}/refs/#{ref}/logs_tree/files/ruby/popen.rb") end - context 'escaped slash character in ref' do - let(:ref) { 'improve%2Fawesome' } - - it 'has no escape sequences in @ref or @logs_path' do - assign_ref_vars - - expect(@ref).to eq('improve/awesome') - expect(@logs_path).to eq("/#{@project.path_with_namespace}/refs/#{ref}/logs_tree/files/ruby/popen.rb") - end - end - context 'ref contains %20' do let(:ref) { 'foo%20bar' } @@ -52,6 +41,16 @@ describe ExtractsPath, lib: true do expect(@id).to start_with('foo%20bar/') end end + + context 'path contains space' do + let(:params) { { path: 'with space', ref: '38008cb17ce1466d8fec2dfa6f6ab8dcfe5cf49e' } } + + it 'is not converted to %20 in @path' do + assign_ref_vars + + expect(@path).to eq(params[:path]) + end + end end describe '#extract_ref' do |