From 3884e99e8891125da92c30d33fa389c22c01e5e6 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Wed, 12 Sep 2018 00:12:14 -0700 Subject: [PATCH] Add extra protection in `Upload#get_from_url`. In case the extension goes missing from the URL. --- app/models/upload.rb | 2 +- spec/models/upload_spec.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/upload.rb b/app/models/upload.rb index a8c766a6c5f..947481cb2fc 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -177,7 +177,7 @@ class Upload < ActiveRecord::Base end return if uri&.path.blank? - data = uri.path.match(/(\/original\/\dX[\/\.\w]*\/([a-zA-Z0-9]+)[\.\w]+)/) + data = uri.path.match(/(\/original\/\dX[\/\.\w]*\/([a-zA-Z0-9]+)[\.\w]*)/) return if data.blank? sha1 = data[2] upload = nil diff --git a/spec/models/upload_spec.rb b/spec/models/upload_spec.rb index 35f0db6a9d9..0e86a0fb3ad 100644 --- a/spec/models/upload_spec.rb +++ b/spec/models/upload_spec.rb @@ -82,9 +82,16 @@ describe Upload do expect(Upload.get_from_url(upload.url)).to eq(upload) end + describe 'for an extensionless url' do + let(:url) { "/uploads/default/original/1X/#{sha1}" } + + it 'should return the right upload' do + expect(Upload.get_from_url(upload.url)).to eq(upload) + end + end + describe 'for a url without a tree' do let(:url) { "/uploads/default/original/1X/#{sha1}.png" } - let(:upload) { Fabricate(:upload, url: url, sha1: sha1) } it 'should return the right upload' do expect(Upload.get_from_url(upload.url)).to eq(upload)