Commit e5e1b7c3 authored by Sean McGivern's avatar Sean McGivern

Merge branch 'fix-42459-#-in-branch' into 'master'

Manually escape '#' when building relative uris, closes #42459

Closes #42459

See merge request gitlab-org/gitlab-ce!17679
parents 2a2b65c4 f97dffdd
---
title: Fix relative uri when "#" is in branch name
merge_request:
author: Jan
type: fixed
...@@ -84,7 +84,7 @@ module Banzai ...@@ -84,7 +84,7 @@ module Banzai
relative_url_root, relative_url_root,
project.full_path, project.full_path,
uri_type(file_path), uri_type(file_path),
Addressable::URI.escape(ref), Addressable::URI.escape(ref).gsub('#', '%23'),
Addressable::URI.escape(file_path) Addressable::URI.escape(file_path)
].compact.join('/').squeeze('/').chomp('/') ].compact.join('/').squeeze('/').chomp('/')
......
...@@ -217,6 +217,23 @@ describe Banzai::Filter::RelativeLinkFilter do ...@@ -217,6 +217,23 @@ describe Banzai::Filter::RelativeLinkFilter do
end end
end end
context 'when ref name contains special chars' do
let(:ref) {'mark#\'@],+;-._/#@!$&()+down'}
it 'correctly escapes the ref' do
# Adressable won't escape the '#', so we do this manually
ref_escaped = 'mark%23\'@%5D,+;-._/%23@!$&()+down'
# Stub this method so the branch doesn't actually need to be in the repo
allow_any_instance_of(described_class).to receive(:uri_type).and_return(:raw)
doc = filter(link('files/images/logo-black.png'))
expect(doc.at_css('a')['href'])
.to eq "/#{project_path}/raw/#{ref_escaped}/files/images/logo-black.png"
end
end
context 'when requested path is a directory with space in the repo' do context 'when requested path is a directory with space in the repo' do
let(:ref) { 'master' } let(:ref) { 'master' }
let(:commit) { project.commit('38008cb17ce1466d8fec2dfa6f6ab8dcfe5cf49e') } let(:commit) { project.commit('38008cb17ce1466d8fec2dfa6f6ab8dcfe5cf49e') }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment