Commit 3445136b authored by Gabriel Mazetto's avatar Gabriel Mazetto

Merge branch 'unescape-relative-path' into 'master'

Avoid escaping relative links in Markdown twice

## What does this MR do?

Avoid escaping relative links in Markdown twice.

## Why was this MR needed?

Relative links with special characters (e.g. spaces) were escaped twice.

## What are the relevant issue numbers?

closes #25191, #25318

See merge request !7940
parents df629173 17e3d3fd
---
title: Avoid escaping relative links in Markdown twice
merge_request: 7940
author: winniehell
...@@ -46,7 +46,7 @@ module Banzai ...@@ -46,7 +46,7 @@ module Banzai
end end
def rebuild_relative_uri(uri) def rebuild_relative_uri(uri)
file_path = relative_file_path(uri.path) file_path = relative_file_path(uri)
uri.path = [ uri.path = [
relative_url_root, relative_url_root,
...@@ -59,8 +59,10 @@ module Banzai ...@@ -59,8 +59,10 @@ module Banzai
uri uri
end end
def relative_file_path(path) def relative_file_path(uri)
nested_path = build_relative_path(path, context[:requested_path]) path = Addressable::URI.unescape(uri.path)
request_path = Addressable::URI.unescape(context[:requested_path])
nested_path = build_relative_path(path, request_path)
file_exists?(nested_path) ? nested_path : path file_exists?(nested_path) ? nested_path : path
end end
...@@ -108,11 +110,7 @@ module Banzai ...@@ -108,11 +110,7 @@ module Banzai
end end
def uri_type(path) def uri_type(path)
@uri_types[path] ||= begin @uri_types[path] ||= current_commit.uri_type(path)
unescaped_path = Addressable::URI.unescape(path)
current_commit.uri_type(unescaped_path)
end
end end
def current_commit def current_commit
......
...@@ -175,7 +175,7 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do ...@@ -175,7 +175,7 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do
allow_any_instance_of(described_class).to receive(:uri_type).and_return(:raw) allow_any_instance_of(described_class).to receive(:uri_type).and_return(:raw)
doc = filter(image(escaped)) doc = filter(image(escaped))
expect(doc.at_css('img')['src']).to match '/raw/' expect(doc.at_css('img')['src']).to eq "/#{project_path}/raw/#{Addressable::URI.escape(ref)}/#{escaped}"
end end
context 'when requested path is a file in the repo' do context 'when requested path is a file in the repo' 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