From 8d570b29032133080cce1fb73dde203dcb41a842 Mon Sep 17 00:00:00 2001
From: Brett Walker <bwalker@gitlab.com>
Date: Mon, 10 Jun 2024 11:11:45 -0500
Subject: [PATCH] Ignore wiki links that have missing href
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

An invalid href was being sanitzed/removed,
causing code to fail. Ignore any wiki links that
don’t have an href.

Changelog: fixed
---
 lib/banzai/filter/wiki_link_gollum_filter.rb           | 2 +-
 spec/lib/banzai/filter/wiki_link_gollum_filter_spec.rb | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/banzai/filter/wiki_link_gollum_filter.rb b/lib/banzai/filter/wiki_link_gollum_filter.rb
index 97c5ee1f34c4..df29269d7e7e 100644
--- a/lib/banzai/filter/wiki_link_gollum_filter.rb
+++ b/lib/banzai/filter/wiki_link_gollum_filter.rb
@@ -30,7 +30,7 @@ class WikiLinkGollumFilter < HTML::Pipeline::Filter
       # Pattern to match allowed image extensions
       ALLOWED_IMAGE_EXTENSIONS = /(jpg|png|gif|svg|bmp)\z/i
 
-      CSS_WIKILINK_STYLE = 'a[data-wikilink]'
+      CSS_WIKILINK_STYLE = 'a[href][data-wikilink]'
       XPATH_WIKILINK_STYLE = Gitlab::Utils::Nokogiri.css_to_xpath(CSS_WIKILINK_STYLE).freeze
 
       def call
diff --git a/spec/lib/banzai/filter/wiki_link_gollum_filter_spec.rb b/spec/lib/banzai/filter/wiki_link_gollum_filter_spec.rb
index d021bbca4cc0..0124beb4a851 100644
--- a/spec/lib/banzai/filter/wiki_link_gollum_filter_spec.rb
+++ b/spec/lib/banzai/filter/wiki_link_gollum_filter_spec.rb
@@ -192,6 +192,14 @@
   end
   # rubocop:enable Layout/LineLength
 
+  context 'when the href gets sanitized out' do
+    it 'ignores the link' do
+      doc = pipeline_filter('[[test|http://]]', wiki: wiki)
+
+      expect(doc.at_css('a')['data-gollum']).to be_nil
+    end
+  end
+
   def pipeline_filter(text, context = {})
     context = { project: project, no_sourcepos: true }.merge(context)
 
-- 
GitLab