diff --git a/lib/upload_creator.rb b/lib/upload_creator.rb index 5dd94de3a49..8065d1e6f81 100644 --- a/lib/upload_creator.rb +++ b/lib/upload_creator.rb @@ -78,11 +78,20 @@ class UploadCreator fixed_original_filename = nil if is_image + + current_extension = File.extname(@filename).downcase.sub("jpeg", "jpg") + expected_extension = ".#{image_type}".downcase.sub("jpeg", "jpg") + # we have to correct original filename here, no choice # otherwise validation will fail and we can not save # TODO decide if we only run the validation on the extension - if File.extname(@filename) != ".#{image_type}" - fixed_original_filename = "#{@filename}_fixed.#{image_type}" + if current_extension != expected_extension + basename = File.basename(@filename, current_extension) + + if basename.length == 0 + basename = "image" + end + fixed_original_filename = "#{basename}#{expected_extension}" end end diff --git a/spec/lib/upload_creator_spec.rb b/spec/lib/upload_creator_spec.rb index 7a85c0ffb5b..bee9ffad936 100644 --- a/spec/lib/upload_creator_spec.rb +++ b/spec/lib/upload_creator_spec.rb @@ -41,7 +41,7 @@ RSpec.describe UploadCreator do expect(upload.extension).to eq('png') expect(File.extname(upload.url)).to eq('.png') - expect(upload.original_filename).to eq('png_as.bin_fixed.png') + expect(upload.original_filename).to eq('png_as.png') end end @@ -65,7 +65,7 @@ RSpec.describe UploadCreator do expect(upload.extension).to eq('jpeg') expect(File.extname(upload.url)).to eq('.jpeg') - expect(upload.original_filename).to eq('logo.png_fixed.jpeg') + expect(upload.original_filename).to eq('logo.jpg') end end end diff --git a/spec/requests/uploads_controller_spec.rb b/spec/requests/uploads_controller_spec.rb index 7ac95c9bbc4..542365cd60f 100644 --- a/spec/requests/uploads_controller_spec.rb +++ b/spec/requests/uploads_controller_spec.rb @@ -212,7 +212,7 @@ describe UploadsController do get "/uploads/#{site}/#{upload.sha1}.json" expect(response.status).to eq(200) - expect(response.headers["Content-Disposition"]).to eq("attachment; filename=\"image_no_extension_fixed.png\"") + expect(response.headers["Content-Disposition"]).to eq("attachment; filename=\"image_no_extension.png\"") end it "handles file without extension" do