Fix bug in wiki link rewriter filter

If the url inside an html element is relative and it points
to the wiki base path, we still append the wiki base path
to the url, resulting in invalid urls.
parent 178a534d
---
title: Fix bug in wiki link rewriter filter
merge_request: 56636
author:
type: fixed
...@@ -6,7 +6,7 @@ module Banzai ...@@ -6,7 +6,7 @@ module Banzai
class Rewriter class Rewriter
def initialize(link_string, wiki:, slug:) def initialize(link_string, wiki:, slug:)
@uri = Addressable::URI.parse(link_string) @uri = Addressable::URI.parse(link_string)
@wiki_base_path = wiki && wiki.wiki_base_path @wiki_base_path = wiki&.wiki_base_path
@slug = slug @slug = slug
end end
...@@ -41,7 +41,8 @@ module Banzai ...@@ -41,7 +41,8 @@ module Banzai
# Any link _not_ of the form `http://example.com/` # Any link _not_ of the form `http://example.com/`
def apply_relative_link_rules! def apply_relative_link_rules!
if @uri.relative? && @uri.path.present? if @uri.relative? && @uri.path.present?
link = ::File.join(@wiki_base_path, @uri.path) link = @uri.path
link = ::File.join(@wiki_base_path, link) unless link.starts_with?(@wiki_base_path)
link = "#{link}##{@uri.fragment}" if @uri.fragment link = "#{link}##{@uri.fragment}" if @uri.fragment
@uri = Addressable::URI.parse(link) @uri = Addressable::URI.parse(link)
end end
......
...@@ -22,6 +22,15 @@ RSpec.describe Banzai::Filter::WikiLinkFilter do ...@@ -22,6 +22,15 @@ RSpec.describe Banzai::Filter::WikiLinkFilter do
expect(filtered_link.attribute('href').value).to eq('/uploads/a.test') expect(filtered_link.attribute('href').value).to eq('/uploads/a.test')
end end
describe 'when links point to the relative wiki path' do
it 'does not rewrite links' do
path = "#{wiki.wiki_base_path}/#{repository_upload_folder}/a.jpg"
filtered_link = filter("<a href='#{path}'>Link</a>", wiki: wiki, page_slug: 'home').children[0]
expect(filtered_link.attribute('href').value).to eq(path)
end
end
describe "when links point to the #{Wikis::CreateAttachmentService::ATTACHMENT_PATH} folder" do describe "when links point to the #{Wikis::CreateAttachmentService::ATTACHMENT_PATH} folder" do
context 'with an "a" html tag' do context 'with an "a" html tag' do
it 'rewrites links' do it 'rewrites links' do
......
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