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