From d2325259303d8bcaaa33f9600263f13e83b25115 Mon Sep 17 00:00:00 2001 From: Min Deng Date: Wed, 23 Oct 2024 19:55:54 +0800 Subject: [PATCH] test: add test case for detecting endless loop --- src/exif.rs | 19 +++++++++++++++++++ testdata/endless_loop.jpg | Bin 0 -> 9771 bytes 2 files changed, 19 insertions(+) create mode 100644 testdata/endless_loop.jpg diff --git a/src/exif.rs b/src/exif.rs index 78f5b43..f3da1eb 100644 --- a/src/exif.rs +++ b/src/exif.rs @@ -236,6 +236,8 @@ pub async fn parse_exif_async( #[cfg(test)] #[allow(deprecated)] mod tests { + use std::{sync::mpsc, thread, time::Duration}; + use crate::{ file::MimeImage, testkit::{open_sample, read_sample}, @@ -349,4 +351,21 @@ mod tests { .collect(); assert_eq!(res.join(", "), "Make => Apple, Model => iPhone 12 Pro"); } + + #[test] + fn endless_loop() { + let (sender, receiver) = mpsc::channel(); + + thread::spawn(move || { + let name = "endless_loop.jpg"; + let f = open_sample(name).unwrap(); + let iter = parse_exif(f, None).unwrap().unwrap(); + let _: Exif = iter.into(); + sender.send(()).unwrap(); + }); + + receiver + .recv_timeout(Duration::from_secs(1)) + .expect("There is an infinite loop in the parsing process!"); + } } diff --git a/testdata/endless_loop.jpg b/testdata/endless_loop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9653d93feca9177c62e193b24c7dc0c0cf147f93 GIT binary patch literal 9771 zcmeHN4{#LK8UMYvdw0nZa(782NEo>S2@p(j`A0&e7=;9a2+=@{ZK@#%Nf?MB*p>=I z0*tkl8HE6%jz~a9krBm~p`F@s@XyqaP=`uwQCmuf4((V*D`hN0HQV2}yO%7Ks7#%4 zTJP<>x4-?~@4fGP-@bc$`@OS{Stk&lRb5jJr4(lJfc2;BVAaaD#XwC>E|LHYMM!D* ziS{suiNieaV@^{B6wi`JD4%^kNSx*3UlNaZIT~+u6tQgvWk;CPwbNFk`&#vcgDHmY z$ChREV|4pHxb0rk*7av;z%*?^`C<1Z^vtDc3!Yt|h{E<(nN7cayWaCxF(k0qcmrPn<-jzc+^F z^k|4#lgnXk8o=oBVD!2+(=n>o(WPjWb}@zkhKm~lfUno_uRj||-R0PPW-JhL@p-_62s@j7CY zcr@kr5&Ov!&%Hq$ARbQqK5;T}l-N&2DQqFSp2WQqhmu7BawreG@_C$+>2Ciy5#S0} z&L+KAQZ8*J=MazQIiH;M0~~CoT=cF<2ewjgCGoSw54yI!PrOa^(yl(@hg@BK9QMN$ z7Lo5~2fdW162C#bhgiOW?-B1Oj@xj=qxS^mGzA}#qbdy?V*kUh1d@nlhCE9rCA)Y( zak$d)$vNA&O5|uuKc&0U6O92-Qsa))FP3&BNj-qx~wk4Wmr}WWk_S)U5LgB zu=B!FSB=PX_Gh*5e^R^W$$V12qZs z)$%~>Q-&)q$=lrekUn6e|8_y09V?4XE-5LSKi_@@w?0LEqAKBmga`i5Js|NliK0rp zUIGach=?-FFD{8?$+e`A2TR@6%n|@#Sihg6J=pYM;l=r>d=kd{jCgQ}v9!2c>?mip z?ct-gU+%$?qyc%zgC&^g4NO>8ZN^&4B&DEHvs3d72R0f@LsNqi%Pe8^ZeeJW1g|eh zJ~T?u*<7J2?N)xh+73hwH$K7`HCDCYRn)6`wHxbDr|Og}rHrw_sA3>7o4X}BDotnTPNTzEi3xIB%u)WL zi~*FLq|J|wk(3P>I@RUXW;~rNEkeGAtkbsa9$!c1)&6#~-P{-KPMHu0m;rNF((q8c z#WylW*e%xh`ZE72n*`=e{~hVpC_zwNp)VS3>1$Ij8C!Cn>g!ayjqtc*efOzWV`(&G z?N+%)L)IMYkUFJ1GTW^`s8{rfD>hpns_nWq;}=$jZr6=z0Zh~7x-~ot-_fQ%mbxBK z>bKQ1Ltn!m^={Rj@=t_~4eF;u3e*k867~1sUiCL4Uo|D4RT)V+NtWRpS+?uS7_V(b zB`VNFRLy&I4ewG3WBS7|3b`ocRVngOOjLkLn8G}nvRpD}qMq{Wh>DQML+Z=eQ#r0D z`$o(|Gp1t>+ZXdF;!#2N?YJK=VK$MZdaS^sSWM|gTCjk9)?fy{PVN+1wUBZ5#rPKH z;uhSD8~B^^7M3@XQGzWvfTLKBRcJvYZX)L<_EwKuskf26AHlo$2lp6uVF~SM!Z+Er znPYtbzs4}N98+!m&FI8#GH&CJMHB01vj1x89>VK2JgS+h3H&g#y%qMF;t*qymkKp$>i%0M{mU0};)L+k@T5SF4s*$6UbUm%@;JmNo zD8+N*IRD3DB)^H}^z%GwsSLfluhmpz=PQ+^N#LlB9TGU?sTtxeVTB+MPmyU9U>x`UE9y4@9 zaG{=UbogfsIW+Nb%ErJn^Q3xMZ%NCK55F6DUcTq%(O^xeA?tzAudHJHJhUQQir1~_ z+(!G5%vBA*%I!eQ4}r(4>~+Cel-*vqLMX}hrT(4XuTH6b`X04hHievnJIHHjIaHK~ z>?eD#nmL>J4#aO}A2WBQt_hE`xA5!^6Gg%U2@fPZaG?h-wUKloBXRY4JRtw@c~E~I z=2wJsE*DGr3_AGSNX(#LtamX@{u$*>e9SUQspH8oOhb~^0!&HT@cB%WAJddh>^62Q zZ5m`L~+q7 Xeg`QA{~Z)DBK%8FuU`F%_4dC3#IGWN literal 0 HcmV?d00001