diff --git a/lib/redmine/wiki_formatting/common_mark/external_links_filter.rb b/lib/redmine/wiki_formatting/common_mark/external_links_filter.rb
index d2ea3fafa..c52029552 100644
--- a/lib/redmine/wiki_formatting/common_mark/external_links_filter.rb
+++ b/lib/redmine/wiki_formatting/common_mark/external_links_filter.rb
@@ -31,7 +31,11 @@ module Redmine
             next unless url
             next if url.starts_with?("/") || url.starts_with?("#") || !url.include?(':')
 
-            scheme = URI.parse(url).scheme
+            begin
+              scheme = URI.parse(url).scheme
+            rescue URI::InvalidURIError
+              scheme = nil
+            end
             next if scheme.blank?
 
             klass = node["class"].presence
diff --git a/test/unit/lib/redmine/wiki_formatting/common_mark/external_links_filter_test.rb b/test/unit/lib/redmine/wiki_formatting/common_mark/external_links_filter_test.rb
index fcfc3156b..d4b76c401 100644
--- a/test/unit/lib/redmine/wiki_formatting/common_mark/external_links_filter_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/common_mark/external_links_filter_test.rb
@@ -44,5 +44,11 @@ if Object.const_defined?(:CommonMarker)
     def test_mailto_links_should_have_email_class
       assert_equal %(user), filter(%(user))
     end
+
+    def test_malformed_uri_should_not_cause_exception
+      assert_nothing_raised do
+        filter(%(Malformed URI))
+      end
+    end
   end
 end