FIX: rescue InvalidURIError when removing user ids from links

FIX: rescue InvalidURIError when removing user ids from links

diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index 2094913..e78fa9c 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -598,7 +598,11 @@ class CookedPostProcessor
 
   def remove_user_ids
     @doc.css("a[href]").each do |a|
-      uri = URI(a["href"])
+      uri = begin
+        URI(a["href"])
+      rescue URI::Error
+        next
+      end
       next if uri.hostname != Discourse.current_hostname
 
       query = Rack::Utils.parse_nested_query(uri.query)
diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb
index 352cc68..19159fd 100644
--- a/spec/components/cooked_post_processor_spec.rb
+++ b/spec/components/cooked_post_processor_spec.rb
@@ -1047,6 +1047,8 @@ describe CookedPostProcessor do
         a tricky link to a topic: #{topic.url}?bob=bob;u=sam&jane=jane
 
         link to an external topic: https://google.com/?u=bar
+
+        a malformed url: https://www.example.com/#123#4
       RAW
     end
 
@@ -1058,6 +1060,7 @@ describe CookedPostProcessor do
       expect(cpp.html).to have_tag('a', with: { href: topic.url })
       expect(cpp.html).to have_tag('a', with: { href: "#{topic.url}?bob=bob&jane=jane" })
       expect(cpp.html).to have_tag('a', with: { href: "https://google.com/?u=bar" })
+      expect(cpp.html).to have_tag('a', with: { href: "https://www.example.com/#123#4" })
     end
   end

GitHub sha: 6f5d7f98

1 Like