From 572878fb0df5adb7b946077afb731b76fcb2635e Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 6 Feb 2022 21:29:57 -0600 Subject: [PATCH] uploads: allow uploading .m4v format videos. Fix not being able to upload .m4v format videos as reported here: * https://danbooru.donmai.us/forum_posts/205248 * https://github.com/danbooru/danbooru/issues/3615#issuecomment-1030950924 From https://en.wikipedia.org/wiki/M4V: The M4V file format is a video container format developed by Apple and is very similar to the MP4 format. The primary difference is that M4V files may optionally be protected by DRM copy protection. This could be a problem if it allows uploading videos that are unplayable because of DRM. --- app/logical/media_file.rb | 9 ++++++++- test/files/test-audio.m4v | Bin 0 -> 54324 bytes test/functional/uploads_controller_test.rb | 1 + test/unit/media_file_test.rb | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test/files/test-audio.m4v diff --git a/app/logical/media_file.rb b/app/logical/media_file.rb index 6487f8247..534f91dbb 100644 --- a/app/logical/media_file.rb +++ b/app/logical/media_file.rb @@ -56,7 +56,14 @@ class MediaFile :swf when /\x1a\x45\xdf\xa3/n :webm - when /\A....ftyp(?:isom|3gp5|mp42|MSNV|avc1)/ + + # https://www.ftyps.com + # isom (common) - MP4 Base Media v1 [IS0 14496-12:2003] + # mp42 (common) - MP4 v2 [ISO 14496-14] + # 3gp5 (rare) - 3GPP Media (.3GP) Release 5 + # avc1 (rare) - MP4 Base w/ AVC ext [ISO 14496-12:2005] + # M4V (rare) - Apple iTunes Video (https://en.wikipedia.org/wiki/M4V) + when /\A....ftyp(?:isom|3gp5|mp42|avc1|M4V)/ :mp4 when /\APK\x03\x04/ :zip diff --git a/test/files/test-audio.m4v b/test/files/test-audio.m4v new file mode 100644 index 0000000000000000000000000000000000000000..d7cad067a398c6c7416468e0a6135872062f7d14 GIT binary patch literal 54324 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

LA~WC`4`tp+zZXhn*Kbm-dAeFCYDo; zcUB(qzqqtgB9HONmn$J%-~NC1s6HNT8(#I}nQ>J1+>;GVc_9m59?y&UG~s>>r@;Eq zoHY!5^Jh*8mT!o5c)cQBM>mt>+RINj{f+nii;N99do}#OljMb$KZ?4N zPlS>R9z-6{j4}&+d+kAVM)y6*yJp+7bPQjAUAg@AMo*jLyrGLcdVba}fB8w~$dBTg zQ!G}!TmEiae%-0LPZvm*#8p|}yZr6pc2%>I-|7GFyuZb{@k9T~K%?Dq$$JzFp0Hmm zD$7h-p$dK4V`K%Y~qeK}riw z#O(egY#f^Hq36jQ_%zSuguqNk(-W#(RDZ_C67Vp{4qmaY)KC7^Qc+T#4P3P;Nh z2gSTqmO9nlmhG0o^;f9nbq?v5L>=405clUF#}wVH4&4bRCTs4!^Q%7|=)auL z|Lgi^&+k4jx%&IE<;MJ|zq2bBZMLknv~9^<=stOG_oX8xcQ>_ueHFix_Y_lt%-a=9 zcRmsp;h&<+%W_KjoKjl?mm1HzV=*1NI`Wy(!Fk&bnkj~sC2rb&IbqK3#M7NCw(cxQ zeDsk2ol6pr{r45uAFzM4Tcxw%`nUP)7az~QK1FD8w13iVCGqPwX9d|xNL^sRYPRJm zr|6&P{yUSCe-;?8%(C^{=OkeBy?gC66W=bLVh72y=UmHj)mOeVnI<=hZN?5?L5m$f zj%j5kv(>uytFIC+$<5-8zv(1$w}*pS==AU;Lt(v5FabMo?^FCH$4NlRr!g?<46Z?e1UP_<-y5OU_b&!j-3vbk) z>1Tg)N>?k*TE8@H-z$H|u0I`tbDuf5ewz`voxvie*!s(k=Qm|$H2(_zFvV)>ohe?; zBF}_1mHv3t^q;XTUVV!}eUrhP%xme57ntYG)4rv@vpy%%SmE#0sOzR&FWwpJCTlI+y=B<~HH)Pm_L=vJZIMdUI6XnW>7rrplk=yP%(sQC z56u5BlE5_e;2GQ3q8l#sF7a4%!Xv3S#;nR}{_DGLCWRrZp1&(@liXchJ&XWGrs#(ha zFG)`S!6fT2yEHES;iytlXEg6G%Z-2atEpB75U>1>^H+HT%j1_lNt$9YZ_^C51BT>--o zKKtlS>#`MK4}EP^6m(?}31D>l|B)+d6u?3t_UR#!Eo6f|qk#$wNMw36P?1A}O6=ID zk0?l~TSk*A)_53As#t@CGC>Lhm4SglfpK19Nj$jbf>&qNvri}{7l6eA97YRXY*92? zMqmpSO2sHl&Z9{cTLg>-Dz;FeP;4~+Qy73)wNsc>85kJk8RsRtqV>+;^%^td*3lvY zTfkEo?xTTV@ptR)2f>XB42&NC{%@%ISvNZBh&8rGQ#RIMp-gZzP$>&Pthy;JE=C(+*n*Y9 zq{_g+pyD{M%~eomKXMt&7*-|Iz?6EhY2&xkF$@g0ilc!~gTNmRRP2E|+O5DAE|iH; zSWb*4RcygO8mQPpg+eh(+X;|CvZd&AKH%QPR&Fx}29BMhsTo@wjizR7p+ce9XrNLU zfY`KCT11TIf9#<;x_}8=xKJcUVg6@eP#0yKx7_tV1LKM_(&@54&1T)Tx0gv3dbp@_ z_lY+bTHbhcu1T!?GF_x+&b+vduE`tiCAQ_Jh<~%&yRX`P%|`VtLXWokH99f4L_Dln zeW@v1OJ+BBd}Z`!b}eOth8R;d8{ZF8q$i7d&yJ6j)|Xo6TW_t;q`uUHFc`JY2 zY|}kyW_WC2M@(?3(##|SwzO;A)&6&#ugp7OcJcZ%-nZo~;vKfXFQ(7_?9+Kz;Eu;} zu6d8{&J}OwjSqh}?S*5K((i|Y>|L%mE-X>kym4p3z95+dHjRM7TjuQXvE^@EjMIwV zwu{cLUMT#oHT|GU^olFoTb7qRveY%rkw{^7{Sok5(eFhs%fg8hSHGw@Gr{e%n~s@7 z=>MZR28tnVk>9zJOr{!0{ay6>)zu;y&(;+!d#@VQKiKn?pZVQa+m-7>xN~B!DKGZs zxVWL}t8V49;EUg%?t0JsT#C(g#`D>>4W-qI%8Z^fD?>!LnVc|VdL7Hx9yeWm;ireI zDrHtKzZ9Mke_rd|)`dysKi{K9<#NtN^|8j$A8wWO}6>7 zWWGnuTqzu7)Se@LRV&kB;@*STc1)f%dj@~S?YYV+r!5#)XC82U0I=yjGqekzZc^^?dLCLzyC1eV5GI#8t3*j!d6@+cp`| zB9Y??(NbC)wtujEKgqwyu6n-moA(UOS^Y2LH6Ir1^Sb1yMbDYX@o`4i3H7jzGgd0D zshStI_`-~`2;W@Q`){=En9_Fq{QYiA9A_k_Tc@e_M9V{3I){>G?W#_huYcm#r~m)| zJSdIXGRf5R;OzY0wF?5*e-qh#;)aZ8$M)i>JA$T3C>g%maP95=^|P#(FotmpyyI}; zHi&riYPz(*?@E!`0YCE|T*{hb<@CaL+l#u=4@)yx4+`zkdFwSJkyAeIsXx!Dz*DyK zst?SQH?Vxj_4(c7laE*K2n&1Eu>IRjhR5!W5--1hdakU_PV%Ztltm%^+q(#aOwyY`(4Rq}UHb~iC8 zdAdFRD9_G$uNKbM+ie#3eERaZb0S1QKp+hlgIFunM<$4EYP`?6Ig;pM@y z)3{`Xo%o-XifEZWDQeWbs*$J9az^}!W{FqYx?QSG@%Uh-=YHi;I zZwh~pp7uI{IVkT^JBxI+S8Vx))`c8iyUpeLIJWW4Nc$Gtw9ZXbnt73^_R9#RGe&uj zif(e{+WKEl&RA1(pn3^^Vtx2WRhE}hZ#bI1x$>{`yln|(;!@czydysz1>J0JWR(Ob|Q|LqgE-;UQg zHq9kJ3pjpHP!?Qfzh66yK|MpOZo)o(&3=y@&jrP9idM{GUK4!z&iZD`*Cjq_ewT4P zrRn6GnZmQ)Ki3F*aX~;>Z=Nk_pZN1v7E8E;R1~H2&&_qc*vH|ozSToc^P-k~Jm`9FJV*-eLrG?%rC{Px>)bW4A$@OkO`OU(Qg8>u%{VD4M1B<&TJiK`Ye?EklOaqFpv z|9!5v9Wt#@o_y1B-}R-%uQTpF&tLq5>ALVKV}3`Iq)khzd7e&QE4eu*}q zSZnsDZZ@0GHFa-=>57#4ooVlUjz>Om4(EFEHSqkdJzK$BK6trE(t+7D=w~7*(p75cgzyj z*p4G-a_1K*_^e$%pYz{WOWm82Q@mBh*=NcB=Un_Me7WUnsdMpX5AM3TnorgucYf>g zssL+~Mf0bg*zCTR)%MmmLv72gJ$Kt*O=C@&L^vnQkVu$-+97W6uInF%{_qlQ*-2IWKMBCa^kI{P*K^ zmtJrtxK8eWF1<17%Z@qG9#?6cFxpMoPRN$?@5CMQsgnBAPl}eUsw9EIeBqY{xZQ^y{Q&(yN?z z{kC3XG--Kw;3uo!>PPP_(v!N9^gvpyXrtHfL&CFOsCTTobMIf`ACn_b+U|M%GZRa& zY+yV-Ym%m0#iIV{cO2_B>~2!sXd(S-w?Z=So^5;V@9b>N)M8q;TqHok%m1dO`q8Z` zrhKg{y4JIMg8I#EJnW87MNI=rva)*SPZWx;a^!nntiM?HXQ6Df;OryaZxj**HzyWm@Go_4v047N=F88_ zooRO)_AU{PxnLT)*UNpjeW1a|l5PQ}k8c+_WIZ}>d2^XhO>W$du!lHPo8PgmX%(%X1NhlL?PGJWUUeN`;)+nyczFD!jJ%^}3% z{)01ztfs%2_K45&Mgo`i(cmq%k1r?mYvtX1C!4m@UT>;KXUB<9yU9hCS1Vpfy;GUL zW}6Jd1ce!PcGq{@t1;qV;AmOPZ07T8W%#SW7n4d-SLfz*rFFck&E2^?FTrHWrSB`h zEa9ohpZ%xd@j#CP0~oV#hmJFa=r%I2&Z8HWmeuE#ZZ)J=2o&Un%| zqryS|{ASHH`Rp95nq3Pm|IW$2_sefv>+EP>kyep7c_ls9$IuY;!HwA;oDS zvg)4_?pMZoMC5Vm@)a;|IK}y0XWopcoNXT}-q!E z&x!}FAARhZ#_y!us3vkPXrB7_u>7Yb6P$Px%(CUe?`Thvu;f|sZ7Rl6Tn zNi)e^+&;U@QIu)b^?d1L3-#nwqKb@`+1+BPUy`;#$>wg+D*Y!S*L`-Z?wh*Mupv-T zYTZ_W&-^iI?^M^%h&|uExAx?wI~%y-N^cx{Gv%Yvr}AK_iNZ+|^|k{ACd*3*4% z#B5`xN3&$?Wpx_Xc70#UsHx<4+kR_8(XOJ`o0>w_D_UHetlZ6XvwFYB$rUW@VdiTk zW-VzIP`%ltlRv4*J@nA|vyT6NBs%rg7f+ViXK;PiO1mX~uall=zF|DxWOH8nW{mwV zHI=RzC%^A3Tj@I2bLF%nT`$8&GldI zyn36fQqWapG(&8OnEa2s_ZIQ)wEJyneSnXLW5Owy`c5ACTQxhLM66zVSYY@4R@<)T6=V{)Z*cA<7LMt!m zrKiqUoW1X+dCF4miN_yJ&RY3pUze$^;XfXRww{gCSC{XMJnH*--gco&RevO`9o(Py zT+d_ak&RMxQU4PyoBCgV*I7gD&%zRp{s|G2C)ygmb&!7N{pJI&lpT}#o+FK?Zh>s_2p01oq>tjTT&wrDsTE}+$nXw z&h`s`j`xl9uCT7P7Hb!?iM(C+y=ifl>A7v~w+y1fj(&Z~VE-d&$4mYgy;DqY4da1VTmQ zpPk$2a_R-Qj=m@V{4b|In0~n#**j~EQPF#45i{S*j87R=MUuj67FkZ6`?8@ZhD~Sk zf+I8D?=k1gXFB^bdac6JAGgf+p8I9ILT$UK@Jo{jyFRrVk7KSkFQ_bhaLI@%Sef@& zUG2w~qv}T#<}cQKZ0ogaztQCQvwEJdFPU6ilMr@onR3oYhApeX7?*>^eHt&Z~cY**o@3 zLBCxS_dj_NdSWk^1&`-%t<)_nrZ;wN+E~(k_@|qm{vD>J_68ze?Q#PEa)>m^nKR$}zG1JjdKAOei7L#tW zjx5ZjR&oKaqS;@H@GO%(wLsFX@AaYMGnx;@F<0}Nu$s?a^0kiT^s}&Q;xEq# zea|*TMEmkEozRg zS7lD;aK(ReF8=#YdE$mUUqiW~QWj0N-^sEm<8R#0^|8Byq7?GF1ZEtnEVYl=yD6ma z{=>IrZ=2M1J`}TjpwSJhGREHO`u&eB+YMN3*}WH~fV!zn@=lebMHRTkSU)2hEn1 zSn@cj@j~CaseC*_>Iped{4RP6o-;~tZus)?&hq{R(TciUGT(P>RSU?dJ#pB@{O6{G zwBrV<4rn0wS{=4yYBlO7M8e0 zeA%2Ty=5zoy}#9;UOCfqZ`bXYX}mS6@19R6iS=n%l-+*3)AB=F$-}wT)!Nz#96!73 zyQlCQE{QrbJ+b=~x1Pubi=M#Wm8E65yAw0orgI)$7NPbp`%lHZ*2IK!xhtK1u9RJ# zZd5V-mf71R&3VsWiEa#kyynML+lZ+a zlHFE@*PZh_!@oCmzvN09Hw$Lf7OS_rJxx8Cvv^L0XXtdc$(8}n-)&+);d8@wruu4^e+M#V)pZ|XvwczN*yUw!bN;_-_co`kS4!V7 zWPV;=CsB6x6kDR`>YT@`XRY$J4DyUS(k_2Z>X^d^*J%${J}7Q2y}5SLzB@4u&rLNJ z_Y}QLjZZw!oU)|p*;|2Jxjh>{#9S9S{rupOt8;zMoyl4IVqrmsl#f=lS(Wt>5_djKSM^U(;<+bZBN&Nb<0*}E^a*j^r)+;635Q^NA<_z zHMiM4G3C2xXA*B8{8222>7?G0v-2PKytuu&H8_n~CX9#gHUHa^bBCv_iK(!fZL(^X zuZsM?yLKmZj5kOIUl%N_$#HPGB`^GRW$=MXdu#G0YS>Hv{F9=e{B7|B>yHu&Hg^*? zEuMJ2y>g0d%CXjS?<$r1w0sY2J3G6pKh}Qo`=gt=e|GfO%anSY+s=FG$>NSHjIW#H zgVLoRewo+A(j~-qed!fe?tlJE|4-`s=MxolQ{S@Xx!B~{K_`5Yq&%(b#D1|k{(Utu zKEpTtWl>bzrb7{*3^%s)MqY@RTDFEIiBEE?(9<2iHZGBr`gw2GWd4<6soTUCs^&Dl z3S{kj#u9pXPKNZnW#O~$hb_Dl+zt+ziF4ykZu_q~d0=k-|95vM?7O|5WscDr zPYr{*W0H&1*Ir?snrXeg!pCrpWa-=nF{#EMrHj6>Xibi7?e*){e^}S|gE6PyU5j%{ zPgVZe?OqIR&sR2DnqN9oYpc1eiiCsFFA7i1?(}9cO z#~wW^&XQ6xioYiv9(7Re$BJ7ErgFDEz4qr`N03c=PnDYGT;&rJvsTvpssFU%(cQV5 zkIq%j`(AhhGx5U#$y((G*TX%UrYP{(6IQ;RA>WqmG(q{f>O0)cN zfh98YwXpPzT-vY5D56wiFk+k3bsiM8flzg5TgucOVWeg8?Ri8iNA z`8AAYJ4HEvDroQ8x32ALqIOZw1jWVgmba_Uu4VE#%Ec9Rl27#Csq!Q1JhupZFyHTc zGV~I!Orc-@l#dJFG`swq_R*?1HsreA^TpQl9Udj}xn$mEPjC_3cjSK6`Zx9Eey4Yr ztUfBe?1hs{F4rZ#L%$BBSN&wPJfG_EA?RfB+!bxvlPBI3>U!GNb)-2_Sh4!3pRhyi z_SJFeVqJ3oFD;ER{Ci>_-o*SO*h)6)ZAJ9lBs#?hT}$UB3~Ct&iCP0ZqaYs_c!U)u7#KKC#?_g-F)!X z97BU5mfQ@M_cxwjoG%dS;D8BJGW)b-!N}(jhUT%>^4cGJ$&!@n0<{Ota`kLb$`#r>#QX|8`86TRLl*l zB;GB*AiTMT>&8UkJG0g-XlAk3{Gu;gA3k5<`k#gl=5wz;EPJ$}+%YseYOj|ZOSj-t za-TW-WL(Q%NP{t=g62wN)E5XWriGz!1GxrPD)) zUCw^q-cIM&wtRb;)qWlA2-RP2Ncp&mP zdBQLEre~e8jk}j~t$OQFcBpM$q1?-P@gn&)@t0;W-(>5}Ois>LSuVuXy7}JZ{U+Ns z3lw)thKERqEu6l5$@A{S?Zr%2*Pckc9(m*SA?NLKp8l0K?!jHIYv%0w_Sx>(5w$Bv z)6%7m9BAopyt?bOy~)1!|L=dimowMNFhQYbi^#L2Z;9K_mfD^A7nXLfoWt|xOrxSsLvfx8qOD7wuv#nSIB^`33*^LwZJkA|<(Cnbh=0HT)VZ4QboTyd zb)HVyr5Pq%>qA!NSLX31h%TNcvh91W+0IS>ie)Z6D&qV3a~6Yt!LAN}bKW`OoJ;ik z=N-H`LwA1goF#XB?L{Mt#Sp4l&?iAUo+S67k?VC2Ms-3YBcY7=O`--WF^4sLQI%g7B zoUzO*|7E>m#8523{&^M<7)Pu@Qh9Kr&?fUkl<^l35z-|OHA^QZs%R`t7O^4X?+{i z8ZXALTI|p3{!CA6#qHYDllF&C5Bl)wLiGW5^{p2czYz7WW;(d#m;27UH|3}Kul>>T zwXJ)7>usSO6SG;He)w!#&$!5B)7pnF6Kz({4Hiz&n0@?4%;d9@+Ki2NBZ?=edTRET zS}wWr&&H|sS=YYL>mN^dU9J@-U2$nj?YGR&3-0)Sc+ZzIV&5Yf425rM(h-^!~n6cY6Hv*VgynuAPqG{AIafmB*Fo&C7~^ z{7*Px#`1;n(vQCyiAx1uewSwXYH{L*KJ#0N>d9qIArsuJm3SGxXyr8v$r)FpUCN%f3GBPqu6f$wirUP5SuJl9=I8TH&HJv;tZI<*{OdKA z^po?pmL#9EiqA2M{`Pa$8DVvCza5)1U)?*shs)eAW5R^Bew)_X(Xo^5o?bd2P zd?D%nu^dU!>ZaJ77Dh|C)mq6aeG}KVZ86@i`gmu+_U9TR_XK-$vi8betZrv(dHM6% z*=-&CSxqX!HFp05y}qY8aby@~&YdXK&3!BHnB|guM*hS<@7}xe=B;pM6gRC4Zn>eT z<~(Jhf%f!U%U@;8H#xjvZpoTY8UiLyJXp!QR06vGXrRPkg$VL@9$RSkU**!bur{7i&?`_%# zKTR`=>djEGGrh9ri`V+V7S{{G#WQAQm6&)Y_Y3NU#4Q$STwSWP)ctqD))^-l`>Jdg zxo*$-^7YS+{7KippPuQr<{L|Kwp5j%!vlNqM;kf{DoFK3eL55HHt-%fs4 zTNb3x!}YUXFQd}y_`UPVK3p|y0kb(IpNjjg+EBc-q)U}|!X+1u(<{H%w;S~da4B0q zakPKABVMyfj!)j{&S4APqs#}TRyuCFl9xNxR8;qY)O9Z-X&3vC`-1U;MSM|18n(aGx%;=ar8wlT*fh)wxOr4VUNLG~Ozd=MyRP;N#?J z9cx~;CRMpilmFQh-)Q|Vo~Qr6Qq$kWj05+JB5IDsuq@qPs=Q5wtzPE;x*0p!s*Goz zF`2;Zb7fA-CAowM!5K3Sd%Zaooa>qT_oAm)!W8S&lF+nmhob#g9W~4k%iELF$oq9q z`Rm|MMRGHXPW_#Ct%B)`qsn!ClM_w{mQ~iQ;@8Q(p0AHVMd`@#fD5Zi&a13jVtoF?3bb@*+Mj7 z!>y2Q$Cl4fKk;I_du2qy^HycG{y5pgf8$TyqBq97#JhDl z1T+?N9IcQ%8K~9SvZo>G!>n)duJ=xHZk&2%@!7nE#~rL}7p7VNZTz`AV%D-n3*G0< zHcmBbeWhIeWv^t1{2EF1`QfV>U5j`Q-h2JO=wkbsWm=a)FTY&Q{m@!0B`*C+_ASRG z{l(Ax=H87}t}Iht&F&t(Z}D%@k4ZnC#qxidf9>2Xg>|}*9%yv-Ht#x=we;}zL;s!E z86LDf)@Ae7H`c@W_6L)vN{FQk{Pn})6AwDNWdyC=KImgQ%G4{TEv+UZe9MxUROZWVJH+A)+Ygd_n#ilM) zsyYgvn!}{vfnTh2Gy_pX+^?jeI+WxlX)_##MXC+dc zUAA?+j}Of>*etkZwQ^u!@~z;ulUdX9KAPS2_|16jNs;oCt!z1m7Odi9pZa^^?fu$2 zSBNwvZsG4K1>Ci7BQ{5^-N>0zhn8;z=zxRx_U4_iNBicb^d%y ze_X9)`)%z-D-BnxrhoWa)&As1&g{(ByH@X$f3NcVUZ?i{^~$NO!mIV{Z8)3Xzdk)# zV7g0SY78smkylR3YZq<$y|yKA$JYkZ3Iy5qClCfbK2UX8G7 zo%HU&m$M4VQ`!`Fn1veLut+U>c+-ll3^G@BOOP{4!a@^+b z&rJC$yuJ0rVTZb!-D=;3C8HkN{r%jSqkSi!X%4R!~@B)4UGMSr@oH8jEU zhu*&Zyg#CM9-OsJXFvP#D&55nUj^p8+4A$g#<~7A51u=pyT0LL>w-1Q_h~fu&R(h` zbM2GMGq$a_HraN1b(po7Dz9k^eb~t5nmd7a?!~(NU3VXB4M`I@<>SB}`kCj#0{7Sj zj4O5qajl+`xyI12L_7Pp*E!YM7sSjQT&|};F>r~;m`cG#Nb*qnE z^r!BOe`uP~;XSRN1SdY*5|_1poA;iD7KY3@53)m5a=pI>XEGfB^ZI!4?=#0%Hil~7 zx?GT?Uvc}a8fzlgi30^;8(5Um`5#S+s=V#}aNhQ5=lg`8$Y{S$XIgd3X@Q(C+XdxQ z*MEe?F2DWx|AzL`H51c(PF<@MKHczZ*>Pj#OU3WEyf#&d*!8?B z_I1>0W1W{J34|c;R7EOeP(;yZ_7Vw{&@DI z1)~4whF`r>`0f9X-T&8LTUEHX@cgg;`G5EATK!u5^^gDkKmU}L2l{Hx@(v1N;Q9EU zfop=Wv;Uhp^Mnp>+ud-ue&K_zW3yBRWb3zXU@(_*k56LO>Px#W6bi3uJH~aJSx#~9aC$pQSKiv|nv0Y9#imAHIHFth&##wW=gpdECZmSji7Qby% z-{c`*(kS=jKz0Ap$E8QFsqP7Hynbzmq1Km1$5~&jS#FvhZ~P-$pI8+BGVeg8?C1E{ z_M+$WJ8oLt7umO$OQdb)*2`z3tiwyD^gRe`T&c0u`{f_LFTceNUtf1;J#G4Rb9LJK z<`w-`t0#T$lGyET?4tbbtHcKqH+rmrv8TLrxR(F@z{S9LV9#pNPp*{}MLwy?-5g&crT_eW_-^;=PgTzE_AO0n zpDlm?!~DZ%;?JjMSrwjJePX-G=b2kex?V=^Eq=4`@%EaFz7?Ww8Eeecf8?-;wEhph z?6yvGbNiu7`U0OzR2ZHfvE_HZ@T9}oD{a!1sSG;bzh*s9tP)Y(HJ#63*Rqf2-p`MZ zt9jjeM@xgjAaL%~qqVEolpKrsb3(lEy#1{gHb-adntyFUy|7;MD@$?jzv>46%5Nm@ zG8f&JK0o%&Txp-LQw_rM*8X{K^d^4U?e;Za=dJ!=w>olH=I%1Rt;hFDA1qt`!mV!c zZ@J(t8xL)`x#Mc~)Y5l*X0hv@3$fR2GVNQ-8rH4y)$rtx*?gBTRPl#icdWH6io3pi z*U=MCK4(09z9hWs&#Es4ZYPf%Zk>|#;GxLXDAvRKySt9g`LSu88uJFxm_=*fPPw6W zJY&s@_?r=rePSZFEQ+}yzI0V4XYk)2KXe|<4m8Ssthdg0v%5>!-Km?aUbzOZ*7%{= zc$r~`u2;xhn;EC8!zN5r&FyU9W1HMB*IeY35P;|>)uKTZ#^0!1m|r<=5nIc!_!XYaRZ@7`TYv_d#N9TLvW%(slcwj|g8 zlBIO`-{tGdzs%vgzM$dH6^rm0Kel?9$3HIV->_?fVvyp*raNc;x5w{a_{ZAvd|R&O zbyM@Do0V?)L~LFuaC=ecJ>fe!r#w&G^`4t`vTMDb!USK5=B2)B9-E|#MFh0vLq3J8 zHFd3irQ2K)(i-nHRdCLP!%;IX3V8~yjMHY<3#obXC}nHJ{Kuxhb^7kisPX4nbZ@Fo z$N8O;94_gGEZoaWF_|FRlWgt{6SawbiTde#>+ zg26%TP`{Gk+I_S#EQF2yFZ_K zJ%8WkWUsXMI{8PwYlg3u-NiLs^6mWmXD456EM^PXuxHv8SA%N~;R!#^ykSewJ9hiY zuA2v(#q295>^*6ec>dhNg?82(_>7xoYOf4*zN^yjxBS4>D3g1O?=c?M{(I)*zsX-$ z9k^Q}8+vx0npeN|_V=a#r5>*RcWc>Pm4cqSBRghGseZb6|9XkNh&gBd_kb(>W+$`^ zrWJlVvtR1{?Z;<*mV{_9gd9+kxoq%k<{dWY=ay14zue`VXSw?7YlX~xI~N_i68+1z z*S=r8N78q>?*1azxQhjMGd31=&Dr@}EGg4 zJEMMlTe8q=3WEkem!ECyj=jH*xXqZ>cvG(Z*rX22EN9Q}@Av%@KTt2fM*H5~J!)^a zi7L3>sc$*-E!0qZ?scQHwOgj8Pq-gm#U-rMI&tq$b|s%5 zYW-Yp*^hQFVqVe0zcX>ppGnNW7&Bf5u9(y(`e9kG>Z0K2i-t?{|F6FAN>8xrn@Ihx z5TTD#D?8LaYhOG4t=8bv9)|aBn;ioJL=+BMroA?r{`RR?EEfYSqt@gPn_gJOeYkyo z!yb3h{8!;^kLG$$ll{xB(`@+KH(wwyJ%H)-wZQ2Gy=9ABt50z|v=rr?Dvk`)WeCRA&vq7TU-xbe^M|>=*M&2DlNXm$zNWrNcDdMEBZe+v z1|H{CLR~#V%^h2&o?WdlWkI%Al*%G|n}rJf6E8g4%`-(dG>qNh-X6ZhhzI+oFD=pk ze}3bY^I}U^)N6&N<*?^XU3K9>-U*>?v%~m&8nh!V6s1HC)aqt7F8kL}z)<-#`qwh% zm)TxHGamNaEL{F=`$PhbD9i@dhtUoIEjj?B*D7EMRZ4qRqk)PwP#=xn0DvW2C=(h@ zs+5HvR^1c^Dgy)CkKFwHG6n{QoZPaE6b2N){DOgj`85M00|+5x7!gb`3ytpp7Q{&~ zGcYjyE-6aPW?*25Dai)g$&92LY8uFHBvB9(Dg$DIF&ZCaFDnBB1JebttV(K1NihQh zgG_2paS2!i>gWF|5&Fev1vfZYLA#=yY97(W4oLyv%kj51Pkioh%e z28OcClvEfSM2BS-rRFQRR;Cs!lo{!n=^26CAeoz)m&U-rAX1hKHW}HiDk%^-nUtbb zkQ$I7AbFnBq8tT~-3$zjH;YS>au^sGHWrr@!(s)bW?^DkvLQ$VL>-g`rC33J_h4XP z0AY|ANC$|4!^|D(Gsmr9>!R{jjNL!!6@9PA)2$a*dY24xLUKopl0 zgQ5c_4w6eqMyTb2c*rdPLa#pop<#TGHc+I2&0=I=AS4ggr%_x|oD9~Vv4 zG6&8Fxx=Qoq__&I4n%P=Fr+pyFfi<4U|>*VU|>)I4g7+FiGhIuQ>oRE>Zprnt)$CdP7gVlfyWSWmN=`-wZ0C^o-(l5?0%>$bO zC7?+^u?RWoyF!z`KrtlgL)9`6k?ff`p~*fSE!l_X7MOrCD#$Fb`#}r_CI$fz4RS97 z1A}pDaSAwvF*h_cC^0ZGurxF@h&YIXlrVl_VqpBj#M;o%z$7?V0$SqIXJB9qh2k(M4dM?J z`vn67<4Ohw#(fM7jI$UR7;70A80IrDFa%+D8+w9Io4~-38^^#~D3RfK_I*F**e2C3rof)r4o6y@iDN;FWoGlEMUnc}4M0#I;6Wk8Dbp`n&kno56Y9WDT!dsAcGlv63fy|E%b~m I^$ZOR0P+T2QUCw| literal 0 HcmV?d00001 diff --git a/test/functional/uploads_controller_test.rb b/test/functional/uploads_controller_test.rb index bbf43c610..b2bba1319 100644 --- a/test/functional/uploads_controller_test.rb +++ b/test/functional/uploads_controller_test.rb @@ -261,6 +261,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest should_upload_successfully("test/files/test-animated-86x52.gif") should_upload_successfully("test/files/test-300x300.mp4") should_upload_successfully("test/files/test-512x512.webm") + should_upload_successfully("test/files/test-audio.m4v") # should_upload_successfully("test/files/compressed.swf") end diff --git a/test/unit/media_file_test.rb b/test/unit/media_file_test.rb index 986efca66..c1f4f9866 100644 --- a/test/unit/media_file_test.rb +++ b/test/unit/media_file_test.rb @@ -93,6 +93,10 @@ class MediaFileTest < ActiveSupport::TestCase assert_equal(:mp4, MediaFile.open("test/files/test-300x300.mp4").file_ext) end + should "determine the correct extension for a m4v file" do + assert_equal(:mp4, MediaFile.open("test/files/test-audio.m4v").file_ext) + end + should "determine the correct extension for a ugoira file" do assert_equal(:zip, MediaFile.open("test/files/ugoira.zip").file_ext) end