FIX: Handle addressable error when parsing an invalid URL. (#15836)

Passing in an invalid URL would result in an `Addressable::URI::InvalidURIError` which we were not catching.
This commit is contained in:
Alan Guo Xiang Tan 2022-02-07 11:25:42 +08:00 committed by GitHub
parent 5bd55acf83
commit b7eacaed21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 3 deletions

View File

@ -14,13 +14,13 @@ class EmbeddableHost < ActiveRecord::Base
self.ignored_columns = ["path_whitelist"]
def self.record_for_url(uri)
if uri.is_a?(String)
uri = begin
URI(UrlHelper.escape_uri(uri))
rescue URI::Error
rescue URI::Error, Addressable::URI::InvalidURIError
end
end
return false unless uri.present?
host = uri.host

View File

@ -3,7 +3,6 @@
require 'rails_helper'
describe EmbeddableHost do
it "trims http" do
eh = EmbeddableHost.new(host: 'http://example.com')
expect(eh).to be_valid
@ -149,4 +148,16 @@ describe EmbeddableHost do
expect(SiteSetting.embed_post_limit).to eq(SiteSetting.defaults[:embed_post_limit])
end
end
describe '.record_for_url' do
fab!(:embeddable_host) { Fabricate(:embeddable_host) }
it 'returns the right record if given URL matches host' do
expect(EmbeddableHost.record_for_url("https://#{embeddable_host.host}")).to eq(embeddable_host)
end
it 'returns false if URL is malformed' do
expect(EmbeddableHost.record_for_url("@@@@@")).to eq(false)
end
end
end