From 4c506c4498192b6d60a3731ad5428e2354b777cb Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Sat, 7 May 2016 21:28:04 +0200 Subject: [PATCH 1/3] Fix using link to uploads in global snippets Closes #17342, closes #17363 --- lib/banzai/filter/upload_link_filter.rb | 4 +++- .../banzai/filter/upload_link_filter_spec.rb | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/banzai/filter/upload_link_filter.rb b/lib/banzai/filter/upload_link_filter.rb index 7edfe5ade2d..483d40c46df 100644 --- a/lib/banzai/filter/upload_link_filter.rb +++ b/lib/banzai/filter/upload_link_filter.rb @@ -31,7 +31,9 @@ module Banzai end def build_url(uri) - File.join(Gitlab.config.gitlab.url, context[:project].path_with_namespace, uri) + return '#' unless project = context[:project] + + File.join(Gitlab.config.gitlab.url, project.path_with_namespace, uri) end # Ensure that a :project key exists in context diff --git a/spec/lib/banzai/filter/upload_link_filter_spec.rb b/spec/lib/banzai/filter/upload_link_filter_spec.rb index 3b073a90a95..7a7103079ea 100644 --- a/spec/lib/banzai/filter/upload_link_filter_spec.rb +++ b/spec/lib/banzai/filter/upload_link_filter_spec.rb @@ -8,6 +8,10 @@ describe Banzai::Filter::UploadLinkFilter, lib: true do project: project }) + raw_filter(doc, contexts) + end + + def raw_filter(doc, contexts = {}) described_class.call(doc, contexts) end @@ -70,4 +74,18 @@ describe Banzai::Filter::UploadLinkFilter, lib: true do expect(doc.at_css('img')['src']).to match "#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/uploads/%ED%95%9C%EA%B8%80.png" end end + + context 'when project context does not exist' do + let(:upload_link) { link('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg') } + + it 'does not raise error' do + expect { raw_filter(upload_link, project: nil) }.to_not raise_error + end + + it 'provides an empty link' do + doc = raw_filter(upload_link, project: nil) + + expect(doc.at_css('a')['href']).to eq '#' + end + end end From c97a81d274ff0e7b792ed409385318c4ec25d92e Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Sat, 7 May 2016 21:34:30 +0200 Subject: [PATCH 2/3] Add Changelog entry for upload link in snippet fix --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index b07b7da3300..841f5870d55 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.8.0 (unreleased) + - Fix error when using link to uploads in global snippets - Assign labels and milestone to target project when moving issue. !3934 (Long Nguyen) - Project#open_branches has been cleaned up and no longer loads entire records into memory. - Escape HTML in commit titles in system note messages From 535be93a77ec677dbb561f8c1545a60d0d908832 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 10 May 2016 13:46:04 +0200 Subject: [PATCH 3/3] Do not process upload links if no project context --- lib/banzai/filter/upload_link_filter.rb | 8 ++++++-- spec/lib/banzai/filter/upload_link_filter_spec.rb | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/banzai/filter/upload_link_filter.rb b/lib/banzai/filter/upload_link_filter.rb index 483d40c46df..c0f503c9af3 100644 --- a/lib/banzai/filter/upload_link_filter.rb +++ b/lib/banzai/filter/upload_link_filter.rb @@ -8,6 +8,8 @@ module Banzai # class UploadLinkFilter < HTML::Pipeline::Filter def call + return doc unless project + doc.search('a').each do |el| process_link_attr el.attribute('href') end @@ -31,11 +33,13 @@ module Banzai end def build_url(uri) - return '#' unless project = context[:project] - File.join(Gitlab.config.gitlab.url, project.path_with_namespace, uri) end + def project + context[:project] + end + # Ensure that a :project key exists in context # # Note that while the key might exist, its value could be nil! diff --git a/spec/lib/banzai/filter/upload_link_filter_spec.rb b/spec/lib/banzai/filter/upload_link_filter_spec.rb index 7a7103079ea..b83be54746c 100644 --- a/spec/lib/banzai/filter/upload_link_filter_spec.rb +++ b/spec/lib/banzai/filter/upload_link_filter_spec.rb @@ -79,13 +79,13 @@ describe Banzai::Filter::UploadLinkFilter, lib: true do let(:upload_link) { link('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg') } it 'does not raise error' do - expect { raw_filter(upload_link, project: nil) }.to_not raise_error + expect { raw_filter(upload_link, project: nil) }.not_to raise_error end - it 'provides an empty link' do + it 'does not rewrite link' do doc = raw_filter(upload_link, project: nil) - expect(doc.at_css('a')['href']).to eq '#' + expect(doc.to_html).to eq upload_link end end end