From c78578c097fb293ab6a1a45b2247c3038abec23c Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Thu, 21 Jan 2021 17:20:08 +0200 Subject: [PATCH 1/2] Fix GIF global color table flag check Zero is a truthy value, which is a problem when checking flags. --- lib/fastimage.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fastimage.rb b/lib/fastimage.rb index 3bfceab..d62d858 100644 --- a/lib/fastimage.rb +++ b/lib/fastimage.rb @@ -585,7 +585,7 @@ class FastImage # fields (1) + bg color (1) + pixel ratio (1) fields = @stream.read(3).unpack("CCC")[0] - if fields & 0x80 # Global Color Table + if fields & 0x80 != 0 # Global Color Table # 2 * (depth + 1) colors, each occupying 3 bytes (RGB) @stream.skip(3 * 2 ** ((fields & 0x7) + 1)) end From e4c35d951e208b7bd6ee69792481f812fd2d1643 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Wed, 27 Jan 2021 21:55:28 +0200 Subject: [PATCH 2/2] Add an animated GIF without a global color table --- test/fixtures/animated_without_gct.gif | Bin 0 -> 22896 bytes test/test.rb | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 test/fixtures/animated_without_gct.gif diff --git a/test/fixtures/animated_without_gct.gif b/test/fixtures/animated_without_gct.gif new file mode 100644 index 0000000000000000000000000000000000000000..acb4c2db6df243573cdb83311efe95ea55131688 GIT binary patch literal 22896 zcmeFYcTiK`zxSI$Lg?865~_qMUAl-U2~Bzv5D+0CB25KEnjlH&)c{hYhNe`dH$g%X zk)mJ)MF|QB2+|b-Bz}Gd9#b z<#rMJ1snER^Ye>}ib_jMpEz+sO-)T(TU$?0&&P!0Lk>Vx=Mh&IUlKE79riU8Jp5Mjl zB?%cfmcPi9K40zpqOoEmN9po#fpOD=v3$*&%hNBK9=aq zBW;godWcZAV`lC3v;7I&axSCo4d0$q#7&FLIvVFka#el5jCM4Ae?`?xK4#w8y!58> ze2vRkXUmTd^_NGA%%8Nbermt@|z9vdPsQj8F z-@5oUS!q!ETZ-CyuWzZE3zgr}w0|vryNiR%%u)2w-gD_jQdM&qW*SR#nO24}^Y?7+ zz2~zWJgerjor9O=a|m%V3%MTI-V67=9#k#l`L!-B>@P=?Xy^tAXU9snxe71SVl3FT`Iq4@3T~q>sh_@pdfg8=^-^vcDb@V+h@6| z@}AtTc{l{8(uk zHJ>)L+ryVkwC zP_y>*;Mb3}9uTwqI*keAx8935Uc27MesX2KA9+rGV}R#^-^Me(tF;@0LLn;~&$03H zn?n*gew#0(AJ%RT%eSp;jwn5s-x^i>;I}n~{!CPjSGre^hoQ8sKv2Mzf=9@$XqT{} zdFb13taQ%wB1}&6>A|h97VfavomlK+a*F>O1iy5A2*Tw4@EU%~x`Wya<949nS?kpc zHK1;f$66VN@*YaPGel;^U3v`HmtH+tFLSc5XiQ`;LUB}Sm|d}a9S^f~tq(DjD_`CF zZdFF7e73e6cVcJrSjDlhwv3aQr2Nv-;nWXB8VJskLUm|eD)rV%V~##)b>M1bs9vbA z!k$mL&MJOg%E0Pi+u~bV#H3m+I{N(yoNLDRTg(hukA7}!-$&9TmGpb&>LoCI{rL%< z1OB(JJ@DP{J-v*Brk~?5ry87-CQ^-ApAM0yCo(rmL4Ku|M_7InFxARYpD2_JuonMh z0pe?6(z2332IVn1LZDn8L+m*B{!3QB`uDD zozA-&w5WFMD-+x?8HChx*Aw!IOMs0RSh!HsS>+qzbXVAUDsnT?9_BYLtQc{}?>;NE z8jp3`9^z|pFf1&``U;qRGkib9FHHuH-$=;=<`V#|h4IMKFT~%r4?REY*^ovIy8IsD zXq3EbtxAr_1M%{=oYrU*yW5<^?m!@;s5F>5&4}H(p3HrZ#w6!YV%H#(^%u&svOJ7A zTqqC}RRu2C0A_a}LM}ca!cI6`G4~rMTQF>L1xR>S6ABqkSCKk7Ss|03XmX7L z2UjG5IUTIT#ArmAJP}+i8Uqtb5Pd64?MoP-LKP{Xyw$}2^9U-mdxA7@`@cT3ddRvw(w z2Er0?9U|v9gisnME?uJM^X=i@*P0+v_uk&*TBqrXkjV>)sbB#j-q;I7?k8Ud^Eo&d zl=@_}YnhjGZCrY5YenIi_Ld~iG{URj+*WTJhH2gd;m4P_f5nhMI*ZVv% zmyUt;`~HA{E+U!VqHl}7SiM~wd_HFAgLgGBy2B({qfyrn?9DHk~XP%@|Ot>8Ld zm!h>?WhX9Wbi?nIQos7G9Eq8%1h0}fo6YQ#qEcS|e#gU*lY_xvG3)OUQ@)gaG;!dM zf=d+ex*epm3dP8*UuE8ej7VvUA~w!2&HrAaD=8Gtm7T%?v;2D zRFF<&)})eH6EuC3)s2|_v^CO=PSU2%Coq!hq$yFue4Sx{;J~oX;x$MC4(+a_g{y|`A z5Sb@8k4cEK4n^8P7o4V`v1_m4M{j_YPCwGq)<9YUX-Gtm_OSo`eJ zOwXeec$alB`{*Q=JoXXJKqOQ66F}s)>q9KgiQL@HfViT4DWbU*yv|zABrt>)%6gW9BAkS1JwZ$W7CYnuLeFk$=-Yx^ zRMP2zH!vkq`S(k12{ihMMZdDXpT9jy$79~QY2V!W*hotIF8EBy$7R{Cv#xSMVwd0N zF@L@mQ0I78R01LBeF^K#-YhJ7g7#=yPUU7@0O&JEV%K|tTq*PTftA@*0b&V!DJe$C zCm_X$O{3mFo-XW@-OMr*@EE{c;9p03i$c#@r2FZmLU{th->Y4>uM_SVetvW4XBBIB zLObZEMUA39E91ncuDlo9So|5iamCGKg7%_R$KN-Bu9-{mpVtzu{Lx<#a7=lNTYm9- z8Zz{fQk8eYH~%-%;&}uYIQY_Yq1Hf9-^uvfQW`#$NUO>FO^S3#ABRT1jXi_ke z63t+D2tN1F&HW9Tr-5vtM-=ak^OxqnF?l=FK2o(e^21=L)A?u=5ZXC! z+ks1q37HA$hJ5Oye1Khc#)(-k!TU%9&lGe3MPL@f#sa8=(u5~sS0*JD`7cUMQIaP; zeog{R{E56?|AM!D*Gr??rv)$l_|1LF*Hi=X* zMtbGs@PSROn?Se10GC7(!4a_2$X1z%y*d?Pefb`5Z=9buV9w&n1zc601bn~8xV!6p zmhhtT=aJ#pgvTvk!>zI7Ny=eah1prcqG^_Iz@m$QpQguZNG?x$?in||)T(&weZctS zeYB{prD{HN?_G;Gsd=YjSoqcD<50IxAtRRnWy%c>5Jag1XkmnQRN2p>jBgFySf+1m++{x~Uc+(zE#+r~(sI*g6$PDr4o>XkAKbok#sT#k#u( zD1d^)PUf@e!>no*D!avztCPF8|s9DoGWPAset#EF%}#R*z?pqWs#`+4~qKZH}97#G?beQ zpyWUmKl!p+na_oH>d7ywDVhMX#DXo!N*KP<-KSC~sge^&P07=+F_F|@O1SZ-#6jkv zL^`BYKtq61$U-)AOMtH&j&_=z+7|?aanCh3pwlrSe1vMtsiif z+yf;*K!Wv<)AdZI^$$FKWGVG5rU`FZ)f=6PKjej5ean#mJ1gD?^X%2-u~Kg*<+|?y zly;-4DM+H$;~iP#Z`Nx05a8e=1DR~%nu@A%U!)4|GC}@XQtPR{-K+Je z|08gQO&x`W@L#-UeY3HQ(#W0uI9@=#E9n6frYTCZX$V%zy^p$Hrh&3<*14U3KdeGz z1W-d-a)Oe$tgo2;Xx23%Rmrw+ks=?2N~;J~0jKXwEu$_8YE%s&34)Jc$W|eTR>1&& z6!8uUTz*aP!3b;Hm~0!TsI!l+bjS!QqqFUV+atH=s*08dS=QTyPN3ppzQiqaf@ zUp;j{m$kETf4P>!P47*Tbk6C3uzh0QK1u}?>>G|WKG&|APU`!S8J7=;Es-#y&UI|+ zKlhsJ^NSiskfqg+gBiD5LQR_jI$P8L=%sd$qCgkj6XjWd%|xV?{!=A}#6tkEnjdPr8Jvy}(M*cv?W+Hyh_% zVNg+S(C^jbFL+*Y?5lAl4-eP2r8xt&d0_U_6sK=>aG()Jf1^NpCEWd7Ai$rOQpju# zt$*?xG{9Xla44w3T|ahy*#3=~)N+d3$^qr1Ibi%9e7X>+NT|KjWw&3|sW&!p zY`_2bs&08TLW`FF{_LtAnh0#@(YdjpX7`juDJRJ&iQ*FAAN1B`3kki-ST z8X(LMZ*aTS@`B!!(Y1i_0W8qoV%GWil=qi#NXK$)@HMhkT_aV#drk<*b^-|!APbT~ zBE*2`e=*IFOXxRWn z#(x^U{>oBsvM_P9b9FFP`xyrRrJ-e-W8y9K{AbMU)O+@i!s$Vae@-DOYTqw`BtJie z)&;>fWa+A1pVX&6$;{8p>V0Kz`20roqBNKW{G_ufm)@zc<9|9!OVJD$ z25ip&g%`@byCpAmd$^v-{3#D8P^Jf(g7_yOA$w{9*HCIjuM9r}vh>kb)muyr-{=w5 zHH8Ba3P7YFffxJM#`~+)%J?6)3F+mzB5v@R>yeMgaB>0j29aY7Y%f?pPeX7#_#0eZ z`^)T!U$e4xfE@Pw^f1_ARWbt(7L7!;cy_a=Lx`;X?6VNntQhU81(X{E@id$I1-OS% zPZt7)UQF>RL$OL(yhzBEOWA>rqa6N|W~XAS9;HS;2joGJkf*0tVt!ot3X#G=issT4 zdX0xHR#+NXWC;){|Lc+s5Ych#kX8`uItYaWAIpJgFp$c0RW%bZx*jY>Z4YySNcuw> zBY=rj<7GvZA`YT+zKo3qLivLQk&sLaxSk8UC_?71TK(~ZW~5z8x?Px^lY2WY+D>|TZ!!0=-_R?{pA_;%d7a8PtPyEnP1lrfBB324%GP_UU`I z@9>`A5i`H<9R4PX?2>hMV_bLRqIMICcawT{Q)YJ44tFUcdl@==_gwd~qxN!(_wsu7 z3TF0-4)>@ce@b=!l)L_U5cQ|B_)m4upW2x}j}HITi|jY*>^Hmaw?^%^7w>oW?03!V zKRw*1i5&Fl91OS~3`QLc6(0=u9E{E!yks06jEnqzt@HP->)-cLeJ@fa= z;a|E4vTvu7|&(4tI+W|MVOl%p4x=k%N>? z=r}TrZ!>R_t#IjS z4FCBBvpn@{Uk2`<|87xqCX&GePDe^V3+t3qPGZZ>@fLmVaT*dD|>r;CnqNt7Z*1-H&0Jb zKR-WzfB&GMpz!eUsHmve*x00`q_niOtgNj3{QM(QQdU-0Sy}n$(W9oOrna`WBVO|K z>C^uH{=vb);o;$zFJB%ZllSl6fBg9Ih?>yp^l#t3Ei5c7EiE0fleM+A?d|Q~zkmPv z^Jjm5|L@BmQ&gKezwO#Qv9;j>i9oG5_`J|Iy*7p)#gGYR zfsvrp9yWZ_7diGnF%tOLivpSRhOFGuPP7<=o_;JdD?1ZzoeGKP)(ZYljD$7)!8;C^ zuz!Ip1W!C-B;;qr=<5GqBnCD9f_w!HJ5?-j_pPKXdh7qeNT!k3r#o)tr;U$j*0S~e zi;)DL>yKx99m!hS@Es&8pL|Ss1D?bssAxsRf}`UBX&=f1uh7=j=-j&DcLfeI$*+p^ zW{z1n#m2#DP_;>-Sp4hh@v;xWx%s=-mW0xydD}adpxw-xjQaLj=uj%(aW!d>+;r#d zzOzOVmPHt7a?a$I>BF?Wzg~;5SxNg4(_7geU>edfeXxkV?{rtGPy^S?oGIfOcldr? z$c^K&u)l<7n^TWI&pG#w5HGFk*$?BE`c7n*yCN-aeh`rRm7u}d{Do-#jQZj7N%&q4 zn{G>P0i>})?OTSr#c>IO2>Ko|!JMDZ9&YLRBAfmEodpn#-)sF%TJbIF>kL&5@2qSq zEg8uyGXqMFh2Q&ASsak%c^m>K5TwT{GI#$1)78?%Sv_mdB`Ld8oDyyh;wra@4oo1o z?-f>#v`MJ6_8b`=UKnaqrks&iT4i-#OXjZW1my!0BX@AvmNg|zDV;+&!JslD*#&W- zu<~q$Y=KD$B?sOp#g-ZD?&y%to_FUKzNAO?$@zNo5+{jrGe?&9%Knkj9A{rqGSps_ z>~mc^TVVa{)s7a$C0!O)?Xc=7zo~b8alXKn@2*+?U{&J**K;#BrH8|6s@r%Mo@N>U zv11kN+|^1aT2449t@}0O1?OOj&lE+@q`%tj5Nfv3i+cC)jo}5teT^SCd{+Il}_=k*DPS(mw_I@V5@oRG! z`W36kE?+<+v!5Dmw&nU>hwWfDPW>adKq;m|*wxpm3p1{QanWoU&;9kd%&u+jvP#uk z^-EP^)NU=4<;q(fu0j{nIh8Ak5H?lXv56q2J-bD~csVWq9T~3~37st*%sfzX@-r3!QVq&PXmm)0*IFthc!cz}oL5W3kQjzjV5S}BPo4b7u zdxmY7>cFZ5M%LrP?C!bYo$5)fMpTH%qL41pij2@^m4_t|nccCy2kUeu^m?%al19RG z4Zx0h5z)PYAm#|F7hvq<;^mLVrqKPvl@SiIR^)q?gaDao2Nwi^#3Nm9?e9%u=EJ^t zWkzuK(n_F02;fmrFVouPA*d1M^xXj(l+}L-a<;y=kW_Kmt#)2#I}<7nBZ><7XEqGH zK11HdUPzZnV6K!#whz&uNa>2Joa>}UAtgPS8~uVNk-{HJPfblEvMOyyBNH-pP0d)? zG}Z@RsnMV*jG!U+O?SEKdqlGdiG)XsY8hxRbNP=0{CKx^=^C7z=(ZaOIB$$3!U>SL zQ@s!gT@qlUDlR%yu7^;9v_-;l*}IR$c^MSPdl~4>p+LY`r52!ANokY(1n`CF7O;uj61tTx4>SZ#FiL-&^f~53RHsdUcjlHR{V0uV>?JvDPJ z)QIVo4DynThx@Uq@4-^KL=@IObFl6K%`;|-Xz1}Iw?y7STZZyW#jvSB{W(VhiXvj-B{{Af`3K%#Se z1b~tb!E#iB;8IxkmaNqzs${dU>yBUi>N6!O&nLlSFisY6xWX*A3v%eyd(Rk` z=npdnF+0(n$jG})$)|@j0aW42rl}O^m=WwfOAdbw?SVUf$AF!^h|6q3_S7!Ul|K`F zvy0M@V35gnedxN-9Xc4^L1bPqU*n3v#-CJM%iVe{Bk)!gghb%k;Md8Vw2N2-9pU_E zPlvq#2Y=)TMp!u@Io{f6MV{4EdzL{&*4tr~lyW2(Cn$W!A38vfRlMNPCtj(XueZZmcD$}6gXBJn4#1-AsJodIx<#% z1MX1ta{_Q?l{( ztVr`dHmU2Q0qdz9^s?xa?DwJLRdaW)fH`U|bLbMl0AZolEs@4TlkNf#1{qT8F4zB< z4adr?{=AmjTl|SVk5qX^9=&+wT7;EP!)}3?lGi9~vx9Q1JySW|(rD&c23Wl{=BN7< z?S;+oqbm!rAKWj9E(qKw!xH+E*j0N~%by9z}zGm6@GmqSQ!r_K_{??Y zDqrLSkUle-gJ{$%!5yi7hZ*DSZhg5AN_NA8SlofM-@Ki?!0GxBmT^0THT3WoFUvYX zjs(@lfaqDFm&9*|Q!DUlr$Q1({LyJ%@OjXSQQAuMipqz#>~ozsN` zxW#w?kD1XYHbZ=Mp{zrEP7g$G;6uNCKevCC7s7|e?DG0Gk;WTNaIZ)0UFFpz20JpN zyH3XPv>RyNB<|%vH{&5<6bu7Fy|!~f;dKsX&K9_|%gZ$$gW8DmZ$~PC>;!UAxxeq+ zX;&R$Mx%C-k4iDham0ii2s=~c_(p>J21qGXEBQBX+jpcL9~!CTWWL2!xXb%;2dP5i z%O8q}dXrFO9XGk5Uhp99y&m_qNxlH-_`i5X79}6crJB;G(t>_s^3& zz3`Ytd!;k9n{LN}9%bnfOl0^*G7LxxZvaO+pr+C2Pkd<$zquq3=+Q-_;V$nNjJzty zel%BbJL}@{#Tb9UivU*Q3P^Sp1@A>GoNd(LX$bielI9?VggR=zPKdQ@NFiP3EMbl< z9ZD4nyjhG8mT6~%pO{K50;h?;04_VE5r!0;z6Hp0y< znpZiQ<33WA<{cgY4o(2>=VHt|GXL&!W$f|7ka&)XOfW8r5Y1ni9btK1P?d`DJC!c+ zp0c)i-yO)~*tqN3n;*274i(MmQOlH&0YV&sm+kRkB?$+iXTn&7b(D-!Wa6W%FjvEJ zMHpdGuCoQ=r;sg}SZ?JA@OlD&Np|xha-a%x@i@wk7kyqPuWv~@Y$8218{@E9kZ`p? z#oBiIL(WGT_&wgOAQ|r*C+6Hfo}yZYk_dB?s|2ZP$X6xLwPIRVLgQM7#yaI!1G2nYvGnM_*e zxu%!Zc^g)3}wSzC!nDE|e{^mJ@lsfa;Q(zD{SFyIBh=Isv58Lg6s z=arC2<Sy^lx; zXiqff2VcRyOfh#RMsk^QsjT9j1NCBmC5LEC+#WLBAwMu2sYOp6a>(J4MWb1B-2~7C z?@~;^=oyy#r>h>g;;FS-NK@AQD^3_`ske~=Q`sBmy4Ccw%~GzjIx zN6<%Ri3?x$Dw?@pu9{Ac`B<`2TD1iOq|sHpO^{wR@Z`PTWq}GP;8PY}z`ar7-$Zr8 zSAaiOpU%8H^1iH50Q5?>1g>m!&#@As49;0bDiRaKfJ8A2Ag&ah*8Ui|;ZCb6&J~S4 z9M^rVY~<%uuC@W~VMX_M#=WzFhJ$NZHtODWBCoTc6<7gAIO9>m!$-vesGkD)e8UBH z@Eni48m8Ghso$u3%k?QH1~R*kw|v4Qpg_Dd+Gq)oRg&hNH5$|^)gM9j4h3Y$3bV)| zvoXRaWYLvjjTd}5Pf#(gY>n?S$QL@0Qpr{94bU)U5YoEE9Y|L8MJkOv7E^A*vORW9 zFIKDpG)nUcvu&FDO`4x7Ag75RlN{2G8WGkSSSLWsDu~Y-vN+|9a(fJ>)Hx^dQ^KxH z^wte4KTiIX$^M|=9k@i!H<`lP+Fgyo?cWRwXu8EF78IQ%UeY!;)CR`2$0t8hlhY)B zYV%Rat;IZX@J0@^qR%I{84IG{4kLGhs?8r_DjDa1;}r696d?VF_iKDbE;#)KkMQRa zlXAhxLXeo36fLOj7%pxo~AvzAj00zwdDBZvVc#3 zPwQy|?^YQ!-K6@Eb~CFJnJD;p?>2J(N2kDS50enhjjc=G?+#qPmyk;%G|;R}%)57K z?>a*bBamPJcpNLiC?^48v_dfUG3!JiY8*@u8g!oqZ`%)gMhtFclZ7jh^IA1xT_w>2 zM-YtrN;<}}8o80*#SZwS=OGI`QyDjEb=#f{h|l(~unnAw05nvdT_Dr=s|Wr}48)PI zSedEhs}1I+4CX})>PVwB>O+d8ySb%o_ywHUCjvv{d*sG$M$ z^E9#~d-%Zj$<3-^F}I;RGQtT5Z9LXcSuDgI1?H*;A*?_ta3O0UGou4uN`c4^Ii$4G zi;LDTI7K_l{LDx`K%OA_cLK68n9!dkR7ytfcsPdE)ZOx{&T-=lZ&w~oLWYgfTG{)# zdT)N&dl`Isi0}rFy!ik68RWoXgEl!K*iuK|9V3zk$9yvXoKXWiP>j%hL z<$|py;1f{6zvHPJ-H2I6Dyh0bMOiF5B4eSx()&XNEd5nX%1GNN(n|_m(>cP_(9ilA zfYpulr&Msx-u`&nW#ratppM4Pf#EG2%S@R-))fh!8J=GO6#Sz)wUJ?e#-z+|vEme{co z9FWwJ5{*>lhyuItyrHg@kh6ur6Afh4nHL6spQI*1tn=OD>oAFbGm^V$e4CSTD#(m( zWC_^Ynw zbE*9GN0oz*9J5!bGM{u5##PK7iDi9?Yy7mx;l=F^VxfUJ=^zdoh?N3jAs(fPjQS%7 z?oLmtiM|MFnPvr-!04X^p3Y8ld{MxDQCxp2z7bTHgFI^$g4gch!oN<){4i~FZs!_` zT@A^dCB8oPDE!O^PPY$NuD$(}Jfo=ysGQPE+)QK?emFZmE%Y2LF%HoHG1;8!Gq;%r z3Ent(0HE*m+&InuG%SWq+32_PCthWvL+y`eWCiQYP<$y?=zQsuFH68^#62OfCW((~w`x_$^P)!6pLJM*7hcfz4WzZcpC0HAIWMRoqlCEdTkwi31%JiQM5? zsJZjK?(F!?@l5b~54Yxzv*xRAK;KK3Mg3cgZ%02dZ~Wi`R+#a3!S#+5<+z8*UN#n^ zXKK|B74oz{G>JEa?o9iAKmPsY*%9`r;WV%Br;e4lbDk{SLTm(gN3-f!Ol ze%(Q8=d9eBNVarEE~jmvECG@T=+n#BDx@{BJHUzH=kF$d)$XseZ9I6WupR2Mj0yjp z5jAAl@*C=`!NazL<;sbjskOhpvvYluU34pRVvzg_d17Hz{|4ZyfF67F%57vy%Lw&t zG2<@-{3l!X536X~#kFr*5q~C&%GbEj{3m|Y9e!u(^?vQrM$*}RJ^iEb_Wrx#eTPHj z)1|8DjUZ<~mL)VMRAP(V=(q2lUeF?lQ zDnXOTQiJ4tgoocG>GD7#&nZO^KVfhvgZ13g=3M_iT8a{(Pv477)#EtH(yE35@Wb3^ zNod=2RJ3IxGuwF3b5c316?;x6X|;-Z?^Z?Jx2BL9pfPX z=GFcpGt3s^iTmaNS?->v`R?}3w^hl9jnR9Sws?t>@CXD3iw%-?pfq^N6}%aqFu}iAJ-`h3&tu zUz&3|D@wkbzMP6hyQp%APN`(D9{=P&V$}9Id}Oh$R>jB|{8K}oO_Cx;NIF3g0Fi0m z+rQ0Gd7V)Xf;=wDaNhiH zdeCV40;(GQ5eZ$$)!vX4e$TY5NztG`ivHyk!FlG`A((Ys1fRzvh3G5o9g(_ZYEvPU z&(0w#eYJnBHnDS#W#q)647OsGAz?I;l5H|xB`vu9_PLs%)7E1R!SKu~W*ZgkdCoHk zI+$0pS@iuqk0I7G4dLpI?d3LF*!a!HW<+d>;cit0=&`J#1qBPK}*rCuS#d_t{NvX|W{G(geX!4k z%KBQzBUTP~9~}ZqILMfmaHdq(BnU>@oMEabM9OPs7hGSUuv?@>FYJD`2o9nBrJ5wR zB_lZJZ3m<0>Vi3{zE-*z^=FJKxxL;Ra}1>sC1eN|o{qhbwbYR;+A3f{X%e^G>u7WW z_O9`tNyl*nildx(AuIroP(+}hp0UAhqGEP|3@fs^q_O3VW?K$T{%W>z!dYz`814~W z9fu`)sf{EHsVB5Vdu>UjnPk9iJI2rn3DSp?Wvh8@C7kw5@Cotq5A1tSLZ@&BGQd^0 zP%MPQS{1|+Dk+h9T-ij5>0C#^MUICd+0fW!uo&NWqwD@;_7qMvsPzYNC=rCP#X^PG zad2tmxE0JsQ7}{jEU!f7t_8t0hQJ)|;}BF35yBKR@2I~%6y=3wI_`x(%Fjc9dyT>R zjUrF|>qjI+LC|A-cvhEn2u}hPisl2I6UZQjGzKVt-1ezZi;?LV<;svCfH@+F(dc_e zvEKZbxYsh(x4v>xewLd#n7(E_iJr)egjVHX^v218M$h1inj~iSb$om%rK(R*THQ_h z^vwYq^YA)byq|OqFI~-;a~;QGLnrgk(cmincvf8^xHr}$>-0M>zX=V;$D``Dyy>g8 zqkRMQbo;UfeNX)eCDSQ5U6M5c?3q7jJ}>1_n~MoS<3lF85H52ESwG_S(g z6?4&xynQ{KOcf2?S8x5eYC-CxP(M_87+8T^M6TH@s(4)s*zqOyJR^4hi7W@dhX@~f zH+QyV(l}pjj@%R4jhS?w4g*gk(+E`fcIHo5aN;Lrwh0sj?)P!fJdR0_Quee_eAss4#*}w;Pp)u6aO)b^D?rKj>yw=G1_qYex z_})`D&!x!0PrTkXb2*DChnX;Ta6JByP8OivK;@`s<2=M=H7~?;zRR{zE zgTek4$v84p`S|z*1qDS!M2;dEM|lht6_ukrhL)Drk*8{GY;10BZf9qA>C&YuSFZT@ z_#COK|H@!QM@PrU#~-Px85tS(@82&kFR!kye*F0Hk*(U&($e1Eeq^iCXtaTWf#=Vk zzj*OtWMt&kt5;J~Q?s+PN4bk1KYpyQuOA7kzkdBXa#r{D_WpP7;=d#r{(o`$AIXRR zdA9#hI_mrn)qg1c^Ns(S!++d<)cAi6WB4?e0N2n>)r-9I+jh)rt(NwU0_3r z85Rs#XVRY*>u`61+(dPwnV>w{R3cuVJquT6@^`Z7U&3mOtQ+yeW2M$4VPF6L3y(QG zZ3|7Zun73oZ$&NZeG;FZ;9vZ^uRmlR#5MepViAvP?rosWT5H!HNZAMASPcB*tW$jB{x#2}A^7zor`%skmXSTEB^Z7-DZ~oFKX)XocDU1jz-SQP-uk;7N5X19oUQip z)8%DZU8y9K_uh9qD957;KeO0E1J6`kvu%vq{}{@?Gdb}faMi)4`S$$;Qc>EK{bfs) z1MUydOtRe1r@8lUA1e|l5zOh7Xn2A_@R?bW;Jyp|kFU*?^5sO$FoxEi#mrs-YDHNh z(7odPDGd(5@W>_G_s@2&KMPA;*>n)N?V)UREb54s1{&`N+DqzbubmZ{yqz5>-`27< zVgIZked7Ds;G0Hb;+J^aq`3L)n02FggC=Z3B2{P+?^fQu!5XaYnAz?h>{tqVtY($! zyo&fWEiSW~GYO@9PG?L76*q&b_k8HTK(Cy}0%j6?Jw)9?f7AgpiFda{-dP#!Tz8HO z6y96lRbX8BCWU_)c8(RqSe?ImUm#?ptnCZsd&p_w@RyJ7#_-H5JDm-k%@T3hUt{k5 zf?53Wnls{DTg|myOUz2qR%I zV-+i)>vq4=bG7C;LB;B_DA1zPZ8?g@8Ek3dL*Vw4=}Y|jvW!HwHFq^A<{p7b${)|6 zr3>Y&r80>rkyxEU(8koeV!@fctUq%gn00+|&2|V<<_toM?PBw_pxG~CzMAhyb%SU8s6lb}z*5b4lki#TRY+Bs(Smq)Q#8uM8YSy!Nu zB8s4T%PWysY|ml+!g}EX1PT~OgqpL9;XRbd?3&oHKxHD6CV|X9xh$$M4uVNokvO`j z>SDRHxtC%l9FyK+ntUW!cyKlo0jJX}OSQG9fe{h}e-}IvszH%`mgpU?Jw0rB-4TiX zV=5N0pNNonM_~@7CGu?GoEf5ICDBYT7z@~$s0tRak`1+%DHQ=w7`PwJDT{IMo34^1 zMab`!9J6u8ZyqwFqnxO)Xln#Nu+#rMcV3Zs62!hZM9JV7fP|31%x|SBZ*c??D;Rw4 z!!F-Z(j@8TK_aUP?gjDe1F!(?_+2HKMQFCQ9IiwPUu*m*L4WnQBrV61D-YlR1!0d1 z+i=WfkjSHSh^TDuX*RJeE+MLDV6PMY*c-Fz*V`hpn#rbj)m{s>n8+$5(DbG|+Ietx zid@1EaY|OvzI~Zs*nQB&X07*(m{?JXgb((jTU;#lpo)Da6L$Mnbs`>ErvBy@QVJFm$X(%tU7(a-_aX;)f5CYi?FZlEjuS{?n6OD9)7y=xFs9k% z9}@fAs08&#qMbhRbDJNFsh~uzMAD!MlKL1F0)mrha&o?gRC<<)7q5@5)fTbm==~DC zt6)5AIfG|5$v(rXC(C}D{NNnJ)otxhAfRtk#Fn~ zjgEqgIu5tXzcyOPuEi!ex5k-)v*e!c8<9e9CYLuJ8_)|VDGm7W13BM#1wL!e;SZF8 zc&tKXKL{h3N>w1U8fcZz219K1^Uj<%La}1+YcISzPD-T4(Z&brBe;w{@45y1CEPM< zZmvSI&?KO|loVY}Bz@o~^aVs&DI6)Umh=~DDi-L^xLDp;p4Rsc%+pR|I!HEqy`0_1 z*NPXqt2HSuGg%v8T+Noo4{%#nbOcz7$(3n>5eKTG>`H2pkz!eVYy)82-dLO@k;Fj& zT&H(_;>h$f=8Rl zd}sGU+@~RyosfJHKqqsUf_`bE?;A$AtVb*6+Tq6gc4;hB(jUxbI1Xl&xSR4PBdKQY zXxGo|q^znEi9G+c`}C^|q4$o0OuxF<&IA%OxIYnT%rDPzE>1uJ#(E6qK&c@Z1Uo^P zfd^&Im^~bXhz&_p{3;=HHV1Vc8QvHV<$?L@M7cj zF$XLknR3c@h=EX0aw@I5#exP`GF9|_}$yIs$R2Cubzxg)R^_-||XLbCx zuS5kcg}5t^FC#kh_-|EeeuA(_BJR(jNXUq4HER}DO22vzJc!WgkTt1W1P(^+!>0k_YyW;SXp96P4MbtRO9T1IdubrVh=v z{Ms>!onMw=u)=6}i!j81@8(x8CBh}I_JX8UBK*>$u1?rc$e~Z-F&v@j&UoUQ1n)Et z<|pr+eShfZU^D{jvl?>CKIHtL7VY|sh~eWpqrWdh8bJ5AkZR9;nCZG;O+xg|;Q7+v zt~p*#g1EXSZ`}pr*Z^9YCOgw`r!R+$*3_Io2W)-k6<*|J4ZfA2awIGe#f|vYs6kJ9 zeRVSKP(;DlU81!cR67`r#VH)~l3i2|3)r~IW5kaa$DG-X#=F^$VIrQYUbDI2cmBDu zbY;xo`^zxvc+_khgYdyqCn27b5AezHh5Ccedd1_w(8F>mj0SH)yO?!byv#H7+HYQS zO~BGY{(l5$5tr`fr-B9HTL}PsS!f|6@EA>%iEROfaxnpqNQOWWR-q&p2>?t)(s0S7 zfwF~64={;>_z#SzB$QZvdboUXn1nIZC4qR1_rZb?Foq=tb4LY-op^l<=ZIi8SO#!k zA$S*6corVug;GI!`h<&JCSZ6GimG9Fz!3q&c2ld>jCi7WaWPNjQV_Iw7Pe@I|6qiv z(Tk^eI5BuV!uS&bB8lnD-+jL!&-8-pj)n1T(_9EFID4^e+#VF0(d zk;&*4ILHu76^z~LlS$?~AK8jvDG;?$5DL&l z7V!d)0e)!tW#0%9FBwp66P9eDhG#LA`WO^BsXSvDjY}98KPi8y!8=9ym-5Ah1Mq?n z!ITa_k_j0U6bXMyI9crYaha)rP^g#Yqk3Kuiy-Mtp4gD5xjz7NmS{;EgeVY1brAv5 zk{d~vfhG|z36pEbjB~jUqG^R?sV@XbIg4qO`_PlvQxQQqnqNtnjhL5|niGJNS33BW~jIa8_mmBuF#LByJs>6$PpVi+M# zsa2kLSeFlxn+9=M!RdI9A(O`07M`gc>&c!#ft>XC7!QyM%^6uA#EwkI5CM6ZAc>W7 zk(bn15SREBgW;a+Xps?VF*op`Ug4MSNFibgo@A+?|5-f+N}mKleZ0vKNO=}?2A;^s zpAM0m;mBoa*_uJ<6$fxa8QC&8fT9*QpDendgOi+22pN#+q^fB^3;7kFHJ!f)nmxGW=U!^jN+$HdYpq(rBf;wTWX~pSw_B{S zu_a#GGDSK7s6o5M zt7|7m#d(uI(UXu$ii<~sj9RI_Mi9|=7KqBFXR)cJ37ubYti1Y;6k49=S&{HHRVzS; z(`uU4%B+5vs0Tr(vC1TxLaYtJq)HjCdEu+LIZg-AuHhF0k710+x~O$J98uw{4H_u~ zDWMv;I zSg)ib7udKs{2Hjv^{<4AmM5@y=Q>petFLvFu#dX1`q!{m3b6kGu?(B3GF!0%5rqSQ zu{>0+-1v;Z_?SH_H+yy#-U74;>#B^|o=_R1=>o3`5g0J55spc)H0z@c0i@7{vpKtw z_<0sZmbESOvn#8hj*2-%>lG3!rquedG%^tsYqlO6wQ710Ia;*$2BvXgoh52C1ADM1 zi?VVmwxubnWgD_-iMFiljtYwrr5L!IJGdyT zw2nKmO>4HBsJLT$5ZxEC*NHc~I=Mb}7St5G$a}e}TbuUfG`#h)p}RNZ{wb!X+n=e6 zv}ozA9}7ZV0=r-fnzMTmwQIDv3zoVIxQ5%io=X+KE45`byi41SJG*qLmcRO&Y6I85 z{`IkSOT+(Q!@-NgU)+u53MgfqIz=4Bfg>P6T0eU$w?^A;0aJ!|Z!+sVc{s z3>hIhmUaxQDVvshd=Lu!Y6hWJN{kUqOpQ%uEobJi^z>j;frzkFfyy^UCK{5=1=9M;yv$`=6p~r^?IA zZtIf2Jh$PRs|H2PKFdAFti{P}zRP^O3}FISD}5Da#$id#|6t90Qp2Nc$)onqr}(?y zJbP?}J>)E8<_v6lEWJW}AM9+sfDF%rti2U1#kdH!DT@Bj=3~rRyp@rRwaQ${ZM+bv z{F?uO01My%?co3ozyJ%N013dP(rk4Itb><5FLl!d;(7W)KDGOQZ3aeP}L}q z0$8mA8NFlcTqZq`Pg|I*N?1@bS=WtEP~nj6>bzwf*p}U=M~)Qr-}WkO3m0=7{`h< z)98B}lRZ9_JrS2J5SgvZn{BzC4XopY0HVznj{aH28!Wyi4Vv{9!ZBUH*=!Iz{1pA!0pVyA-%cHoe-c6-D|C{ zS1YRXZQTPNoY~FAtR3720RyGx6`wWUyq$uF%gE}D*Z;81oIDlx8y8*cwC}s$8H10M zjo;^!%NMcB{vFSs{oD!ejsa4&)$PdF{fP@M$s(MsicJvS3}zJW-WKk@&70xCz1Tt? zhj`OfN3MaFV&eDRxdo%&AZ^yB>*CHWRss&$8=1HOXto@zHgesGIqudLQHngS+Xdm6 zI~wFVtb`X{=;?`TQB+eYm zeX#%iT`*41`l_K4nCDmA!DBvxWnR}0f##P!5Q)o~kxjNq&Z?g7vZ5SfbUx~Ak+^s3 zx?nEZVkta-zFDp==w3nS7BcGx5v-wY>+UG94gKi(%3A;W67s@eTrn&55_;-2WPo5-yT<_Iq7>e%kv zeW>sL4;0ywo6gNJdhcqQ@AJO?@6bLKq*{2?KH~L#bwT7E29Gm$%H{4n=uY171@Z9Y zzM@cT?2KHu%G2v{i1GeBF&odMRUAz)pX`Gv@?%T#Jud3?uCJth785VkIPk`43JXp-`{p zCO`G=n4Jg!p(0-GvQdAj_I79f_XmxAj|A2OCTBTs*BI+WsTW859ZqHzAY0ukPY5!^X<(RbQi^w_%bw8*hMl*+BW7_iUTvhTIRd-AaI zn*$)Zr|;y)7xt5T$V$WbW8?V3Km3vpP-Cxw$1e~|<)QAMu>cWbz(9fnCj3K~P~k#^ z`y4)Wv7q3@0V)_i#ORRWMve_LV!ZHgqKS?r8J3_}q2x!69U)M3u#x3HjvXitq_C3Z zKL!+Gm`pgcWd@2NI?n89f?`gNNJZQ{2sG$UsS1Tw#o9DuR+B<$V)cr!#Z4Ssxkf06 zki}NB3ehGU$U^5w4HQ3^tubIBf|gv7B6M&QMAnQbB;F)wabeiD|Ge%CIkNFWloM4R zrOJ^g#S|AaEB@qwcmPwaEPGD;3G^|-%>|8?X1h`8MADu=B0N1&1K7`18Bdn_7x-$z zS6z@b+t(yof@*I!-WNe(+_@R+PP|LF21CBkGe4z>zy)uIA`prmsCeHj9UX!Ueg=X6iv*$=aY`5SX{HKK&s`F32 zsitDDE#it3>NtwZB2T%Fm}_pW4tbLft^wrY(4pP1D{i~JCKK)-32t(r1>YRnK*oW7 zoJc(aF|3iL_XvtlKK%x=ufZ1=vcZ6xI#?3Fgj9F{z0sOq`1AQzdmGP>zzRP-SWMH(o( zN_B(_fj~Q)lAr@d2u=kFCLN#yfs#z~O){Ot6iN^O3AIW$1?9-jn>?^8vk%0?>CcSJ z90<)@8C!FJHoJT%sih=*v(bVS(6rUBP`F^C6<%%DJO2>Gm03a$Wof(CR~2qHqbCQ761ZB)G>L}8 zD6&9E$5_e%guo~|fCAct#fX7ei*=W{WS8xAQH0_Q)>?&F&=N5RIvCI1ePkE`17acm zCV5IV~iDGX!n^Hp%0|qhf{*|716-}MY8||6JDr6 z1{Ff!fH{I+J2)|Pxo*kflLv@+vWc(mwxqZznxF#|V5niA7*r5}0|gL^poR)Y4tgJx z&nuRuqBmx1WxiE>@L8D^QsL)`9MB+y5mINP;ybzl zZ(Z~opmZj3Je?$Oc}?5SM4m^kh5dsD?VH|26k-ASB?LSOtKILq_b|N8N__fDmq|cK zy@eo#0|{Bvoa{9@g~;!A2pmdL1n4Zt!Ehrtus{gYQbWYlYkLD68Wa!MJq7-!fmI0} z5N(%5!dQ@NdC}mfI*1SuC~=7f072g<#H#mQ5qJB*!1r935{gyjSEBh}K_;Lvgy>36 zDdJ&5d^jQq25}-R>t5gRSHzTcWCSl!Vjc@}fhrcNfKJn5?xtv^O8$d^m&*zlGubpz zV&ystxuDU&=sYooYauP@AA0^_ffoqs1Qbb_072QMI7-GtFKi@MTK+Hr8lq|d3Se2k z{z#rcB4m*5D&$wj=9(dL1ZHEp-$p|4FAf8e=;XwY8f~F;en3HTJ=QhHE4Kx5)3&?;A-XsGvEno&DV&|=tIS>VO z(kv0dQ8lx|0t_60A~iIC1xApGfqIl6H}uQE6hZ+*y|E?v9KZtj=&q8)z@P=;RW>`yF8~3w2g0ui7! z2b)xZ2}qEFaFPr-IZ(j|ED!+)B;c43u)qdH@Yjye00ks40R^i90~Czl1W$!jUK28d zsg@v@w^FKN8S7ZCz#s$~u)qW!us8%X00I=azy>~0f&iY=oJmD)avh`G;V{=P&V_Dt yr8`~fE(Ar@l?isW``GPX1ULZ!03rSrO<`nZAa`kWXdqK#a%E+1RBuOVW&k^ib%>(? literal 0 HcmV?d00001 diff --git a/test/test.rb b/test/test.rb index 3d3f9d3..894fda2 100644 --- a/test/test.rb +++ b/test/test.rb @@ -15,6 +15,7 @@ GoodFixtures = { "test_v5header.bmp"=>[:bmp, [40, 27]], "test.gif"=>[:gif, [17, 32]], "animated.gif"=>[:gif, [400, 400]], + "animated_without_gct.gif"=>[:gif, [859, 478]], "test.jpg"=>[:jpeg, [882, 470]], "test.png"=>[:png, [30, 20]], "test2.jpg"=>[:jpeg, [250, 188]], @@ -108,6 +109,7 @@ class FastImageTest < Test::Unit::TestCase assert_equal nil, FastImage.animated?(TestUrl + "test.png") assert_equal false, FastImage.animated?(TestUrl + "test.gif") assert_equal true, FastImage.animated?(TestUrl + "animated.gif") + assert_equal true, FastImage.animated?(TestUrl + "animated_without_gct.gif") end def test_should_return_nil_on_fetch_failure