diff --git a/app/models/upload.rb b/app/models/upload.rb index 80e30c80cb2..cf95ec5aa28 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -232,9 +232,8 @@ class Upload < ActiveRecord::Base url = url.sub(SiteSetting.s3_cdn_url, Discourse.store.absolute_base_url) if SiteSetting.s3_cdn_url.present? # always try to get the path - if (uri = URI(url)).scheme - url = uri.path - end + uri = URI(url) rescue nil + url = uri.path if uri.try(:scheme) Upload.find_by(url: url) end diff --git a/spec/models/upload_spec.rb b/spec/models/upload_spec.rb index 5dd981e6a02..6412be89428 100644 --- a/spec/models/upload_spec.rb +++ b/spec/models/upload_spec.rb @@ -149,6 +149,10 @@ describe Upload do )).to eq(upload) end + it "doesn't blow up with an invalid URI" do + expect { Upload.get_from_url("http://ip:port/index.html") }.not_to raise_error + end + describe "s3 store" do let(:path) { "/original/3X/1/0/10f73034616a796dfd70177dc54b6def44c4ba6f.png" } let(:url) { "//#{SiteSetting.s3_upload_bucket}.s3.amazonaws.com#{path}" }