From 4f337c020a7ca7a77086af5021c9c152fa1f07fc Mon Sep 17 00:00:00 2001 From: unarist Date: Thu, 26 Oct 2017 22:48:35 +0900 Subject: [PATCH] Fix Cocaine::ExitStatusError when upload small non-animated GIF (#5489) Looks like copied tempfile need to be flushed before further processing. This issue won't happen if the uploaded file has enough file size. --- lib/paperclip/gif_transcoder.rb | 1 + spec/fixtures/files/mini-static.gif | Bin 0 -> 1188 bytes spec/models/media_attachment_spec.rb | 31 +++++++++++++++++---------- 3 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 spec/fixtures/files/mini-static.gif diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb index cbe53b27b35..629e37581eb 100644 --- a/lib/paperclip/gif_transcoder.rb +++ b/lib/paperclip/gif_transcoder.rb @@ -10,6 +10,7 @@ module Paperclip unless options[:style] == :original && num_frames > 1 tmp_file = Paperclip::TempfileFactory.new.generate(attachment.instance.file_file_name) tmp_file << file.read + tmp_file.flush return tmp_file end diff --git a/spec/fixtures/files/mini-static.gif b/spec/fixtures/files/mini-static.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe597b215551713cc487b98e6dd1e820f632787b GIT binary patch literal 1188 zcmX9-ZDHmY2RGzewceuYnQBUUf0@m``YHk#f38}a!&1;N>t^uzMNlf zy0?4*0SpMB83P>P2#(q5@C48B0REkCkl!y{j5=u(R$UsJ9OeSPXmT}~T>XZFHg z*&7FNAP&qyI4B3>2#&;&ISNPRXq>=_I58*Tq@0WmY{bTF!lrDQg3LGxSRew;jEI9c z63601oQgB?5KrP+yoguvCIJ#i0!t7HD#0W|B1vS4B2gupBuFAjEJ-A(Bol)eiLsc7 zsaR$|i%kkvh(fa%>Y$F)u{u$w>P$VQ%jIfCkdQ8bpI?Fpbbi8d;-gRE?$y znn)9C5>2Yf)SyOctR`xz=WSkABU6%b#ZEUBe(vuw1icBVYfec_Ltw|#lL*zn)1Ygg`nU_PX( z?*57Gh3x*Sx`&P~{PwN>*%geeQaAtd9yyc49E^RpUITr1`e&*$8m)F02 zeD~1$=jOb8PhngdXN~Qv`01BVUp>2)<5j(dMKhM~Jg~I;(UYtCj}7jcbHn`WYWAGi zSXKS~;om-MY3khf&%5_)HQ8b`^?1a9kHYhAI|%trLU*@lY?8|-?*o%bD!UN z^ykTU_SgRV%Bda2;Z-j!XgYn@(1OD{w6Jq@{O;E3Yh_ z{BHf4H_zQSRBS)K>(>JxZ#(qSS3}FbUi{+KN9xAcd^z)*-eTjyP469~39MC~dg)kG|6lcRxA1=G>{rUi;hgjwScL(f9Ndn_BCuZ|quzTmA=5n<3o* literal 0 HcmV?d00001 diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index 9fce5bc4fb1..435b4f32680 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -20,20 +20,29 @@ RSpec.describe MediaAttachment, type: :model do end describe 'non-animated gif non-conversion' do - let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture('attachment.gif')) } + fixtures = [ + { filename: 'attachment.gif', width: 600, height: 400, aspect: 1.5 }, + { filename: 'mini-static.gif', width: 32, height: 32, aspect: 1.0 }, + ] - it 'sets type to image' do - expect(media.type).to eq 'image' - end + fixtures.each do |fixture| + context fixture[:filename] do + let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture(fixture[:filename])) } - it 'leaves original file as-is' do - expect(media.file_content_type).to eq 'image/gif' - end + it 'sets type to image' do + expect(media.type).to eq 'image' + end - it 'sets meta' do - expect(media.file.meta["original"]["width"]).to eq 600 - expect(media.file.meta["original"]["height"]).to eq 400 - expect(media.file.meta["original"]["aspect"]).to eq 1.5 + it 'leaves original file as-is' do + expect(media.file_content_type).to eq 'image/gif' + end + + it 'sets meta' do + expect(media.file.meta["original"]["width"]).to eq fixture[:width] + expect(media.file.meta["original"]["height"]).to eq fixture[:height] + expect(media.file.meta["original"]["aspect"]).to eq fixture[:aspect] + end + end end end