diff --git a/app/logical/note_sanitizer.rb b/app/logical/note_sanitizer.rb index 9fa18cf3c..8d1a4ace9 100644 --- a/app/logical/note_sanitizer.rb +++ b/app/logical/note_sanitizer.rb @@ -79,14 +79,15 @@ module NoteSanitizer end def self.relativize_links(node:, **env) - return unless node.name == "a" && node.attribute("href") + return unless node.name == "a" && node["href"].present? - href = node.attribute("href") - url = Addressable::URI.parse(href.value).normalize + url = Addressable::URI.heuristic_parse(node["href"]).normalize if url.authority.in?(Danbooru.config.hostnames) url.site = nil - href.value = url.to_s + node["href"] = url.to_s end + rescue Addressable::URI::InvalidURIError + # do nothing for invalid urls end end diff --git a/test/unit/note_sanitizer_test.rb b/test/unit/note_sanitizer_test.rb index bebacb3ae..43fa32b4d 100644 --- a/test/unit/note_sanitizer_test.rb +++ b/test/unit/note_sanitizer_test.rb @@ -28,5 +28,10 @@ class NoteSanitizerTest < ActiveSupport::TestCase body = 'touhou' assert_equal('touhou', NoteSanitizer.sanitize(body)) end + + should "not fail when rewriting bad links" do + body = %{google} + assert_equal(%{google}, NoteSanitizer.sanitize(body)) + end end end