From 58e01ea218627719e3e2bd60df4abd5bd7ce6fee Mon Sep 17 00:00:00 2001 From: Simone Date: Sun, 14 May 2023 10:52:07 +0200 Subject: [PATCH 1/2] Don't report variable in loop header --- .../uninitialized_local_variables.py | 10 +++++++++- .../0.4.25/uninitialized_local_variable.sol | 6 ++++++ ...ninitialized_local_variable.sol-0.4.25.zip | Bin 1807 -> 2247 bytes .../0.5.16/uninitialized_local_variable.sol | 6 ++++++ ...ninitialized_local_variable.sol-0.5.16.zip | Bin 1802 -> 2237 bytes .../0.6.11/uninitialized_local_variable.sol | 6 ++++++ ...ninitialized_local_variable.sol-0.6.11.zip | Bin 1824 -> 2269 bytes .../0.7.6/uninitialized_local_variable.sol | 6 ++++++ ...uninitialized_local_variable.sol-0.7.6.zip | Bin 1762 -> 2202 bytes 9 files changed, 33 insertions(+), 1 deletion(-) diff --git a/slither/detectors/variables/uninitialized_local_variables.py b/slither/detectors/variables/uninitialized_local_variables.py index 759691d504..3f7eee4d6d 100644 --- a/slither/detectors/variables/uninitialized_local_variables.py +++ b/slither/detectors/variables/uninitialized_local_variables.py @@ -6,7 +6,7 @@ """ from typing import List -from slither.core.cfg.node import Node +from slither.core.cfg.node import Node, NodeType from slither.core.declarations.function_contract import FunctionContract from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.utils.output import Output @@ -64,6 +64,14 @@ def _detect_uninitialized( self.visited_all_paths[node] = list(set(self.visited_all_paths[node] + fathers_context)) + # Remove a local variable declared in a for loop header + if ( + node.type == NodeType.VARIABLE + and len(node.sons) == 1 # Should always be true for a node that has a STARTLOOP son + and node.sons[0].type == NodeType.STARTLOOP + ): + fathers_context.remove(node.variable_declaration) + if self.key in node.context: fathers_context += node.context[self.key] diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol b/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol index d28eef9578..82a3ab1246 100644 --- a/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol +++ b/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol @@ -6,4 +6,10 @@ contract Uninitialized{ return uint_not_init + uint_init; } + function noreportfor() public { + for(uint i; i < 6; i++) { + uint a = i; + } + } + } diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol-0.4.25.zip b/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol-0.4.25.zip index 60ae4138c0cbb53a9d2b212e0929f5778c39e3ab..2c4ccdf1739484c8c89730b7f54efaf23f024e87 100644 GIT binary patch delta 2091 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 delta 1647 zcmV-#29Wu^5sD5QP)h>@KL7#%4gfoicUIs~n?XPZ000>s001|}t(aS6;oO)2cgKrt@CvFD zq-twoh9To$3D5TK9zaTg)Ydm2R^s1<$U`osaho%pasXN4*8boCo^6ObNyeP1jvhm$^}F=__{;0hp-BOL@WJy!?8)3?Lw!|DR~#NnYCT1ybeR7Pe-c z>b_^!Q*eqK_VeycrZ!*J?SSq2o1(_aHpc6yO1vt&ZX@`?X52L&m}h?uUDkL$<=B#2 z%6l~VP8r$1?cnQZGW=0q%2Mn*9!53Uyh8tjbrS1NW(gOng!Rfcvv+FgZ*5S~@J@$> zK-W^m1WQD+5hRE41r)HopU-VmjTS|1@y0@!f0BF3QbZ@D9dSWx>)^>Ub2wenLG+Z5 zqXyR(Jw5=JDGunxxXOPzZRzAJsY>eQ+E-)g8o7v zm~QTXv{D%ua*2P|z;2sp`+$%S>82Q9BwJ9xVcOE8O~U0oEM{Vw&`T49Q1SWEcd(i6 zK~)4gik6_c7CO9)!*)KyG~rRGq*4{L0B(}1Sj)=-vu$)*pO_!oanXvG7jH))IGd1b$bL$C;S z9u&GbOUbdIYk*i(xZa_ja4JSjPw+MB;rIEo@QT?7N153c%dN#%S%bJION-@;i%Gp+ z|DWE4aj5U*DAa1a<+ns#yFq$rw37~Sb34psT1wkxiMeO9et%iVPfP@w7TTAU@X*?z zbmXJk&2@h;>dy|fY&uUaEZ}OZ;sJjJ3(nte4Chx7zU_6JkVrHRUw-($f0VUZ!e3eD zzz!ft<;6emNU~K+F{T@MjggV9QUa>Qujdf~^pbOcK_nI0JZ)&)Whn_$D_3}>PL^#D zo_yN>4CEA5W#JCVAc$+?FU$Y>S@Yw}pE(>sCJujhncj;Z)k?BwXkIM|Vo2 zwjCVOoXs)LcM3RaSs(*RYNi^04Zq48nlv{(t{YesnMNDvE_TZN1qjd{g#+6=sEPWy z_$!I|qtE|nBfFi%s8@{m*4#apI_|sqTXox{#^>` zk-dM{sKlB+YF~oe@VFK(ZqGWT(%*WOu_tP*FJe$%cclZ#Js8HB@2^2c;z|O-%5DP9 zDr%xU@(V>5IR@kE9hfeBV^8fWFG$vs+*l_5MMtVu&RUGHSDr3t{VG1VkILDPCyM^v zk>{nAm?8)sLuI1dh8Ssh-z(uo&zEcsPuG94EllWaNqf`5)EfArt8L5kzK`VgevFvD z-MokSJIiGWKT!i)kYQwyu9(E<80agSiomqCH(}Fxb>lC86(4(G!mv0c^qc_V6mp3w z>?ZDaX9Xwjm9I6!_N`!w)LkptBVbEDVtN}xF(}AWiKiP7z5TB3@ym?^MqHsDT*ZHC z;8@pnM@$BjB&}dmM|x7UYIIF~7I$GSAp(p!2NEI0UR(M#)X-F>%ZK+IatP2Bm648V z&;dR#mcK|KbDUie$|;PaO+L^DoBVP-*y)<;0WM3l`@SZz{;B9abh^k zFNLiwe&-Kh?WW{8``@Q!GUK_09&0=jCivHLjhK{?*APyJ8EzsVUEM17bHFzrQ@R#r t{{Xz-08mQ-0zU&k00ICG06UF$R^U*ZK|lro02v*VUkF$Rk_G?(003J`BAEaH diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol b/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol index d28eef9578..82a3ab1246 100644 --- a/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol +++ b/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol @@ -6,4 +6,10 @@ contract Uninitialized{ return uint_not_init + uint_init; } + function noreportfor() public { + for(uint i; i < 6; i++) { + uint a = i; + } + } + } diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol-0.6.11.zip b/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol-0.6.11.zip index ca7ea0eb308fe7b52d4395dd5171d8bdbf5d44f2..793b30f4a11dff2246e75b96719158fa033a2831 100644 GIT binary patch delta 2111 zcmV-F2*CHC4&4zLP)h>@KL7#%4gl0uu2#Z)dpQ#b000m#kr-ru^+P_6+Z$mK{=)<4#k(GbXB?s{~H=a zs3iZSL1y6a%c)g=c8>~Gzo559b-?F@wye`NK)+y_mW4~=J%l}F&*_)3Aiw|>(5`1O z>!tfUafTv3v9)MXA`_1eomcR~x^ex9+GuQ`S4J!hJWpLKtoZY11OZt@C8JkKt=}rt1T|(#7>cexL%|Uy^f67DBq$gXC|`jX6SjEm1Kc>WxSt-p z!`n$>=wz|gH+_BJHCBPqpTP4eTN7~FsRG&>M!B|m5CVFu!#IK=J&=mhmfVhPHa>L^ z7s|$sUY;#~wQ9-Y`Tw3f848LG$8Htk!58_pFQ#=4aDiBG$G&X10UsrdpyyX-(%9&z zEZX8dTw`E#am@S0~bIX1#v;Sg|yN6FRV63p;Hpb&rhZF zTD7Dk7T7Ex$v!MUVqKSn_S+W;!yC22^i2?M+sRRHiNnWFG1>j}-Opa(o^v0e=?Y2`@Cvdz) zgB?~SKU;s6qwf==z{3es_*;-CHP}oXKBtGyQ2=fy884l-vK{Q`3~fLvbL$4 zO{^5`VwD-Ad;uM@gF78DMZ_V=X8weQLFSXfu@J5B^7ufhr>L%up2y04WRsJ8sDkqtiHY`TS1QYPs{Og zz`Kr|?iBQMGwt6G)*SOfQB$IP!eu&oEF@S=;uq(^qNTVla^VXozgX)5FKeJQhUBO} zmpz_xeM$#Fr^R}vkz6yqjNgNQ*>@}($(;cU>rpg~m1tCV<30lJzi>nB%&3zZ_aLmY zmKkg;1=U|}$}n<3TvVr=iZDji_lqi&@W}ZUsRZ6Zk7D%w&nL}%Wjp#>ZKKSK7QrJA z{0J_92G7^Y*u{&x%)ml;45s0j+hlMOIkTq4mcuIQ3((rh|0WUhhrQ>2`{({q0Pc9G zdeTJlv>#MhQ(HmDKxuE=ubwDECx`NYGZYc$5>^nuMCd<=?_dL?k&z^U%$+M+NDdP% zRpF>y!;_7M!ZoM)tkiFMhy6waLGRn~o2c*mo)#bO?8VA3b`IszvliojfDnIIy3!5gG3pP6ngTmNq*dt?vYRAOFS&CzRbox;$<9f2n;VWze4R|-F^ATAL!!? zcOJ8_TIsB5Gum@4=fN+3&4{DF^r>N#M6}V|0Sm#pAuHI3CI!%V(ktJ+DJ|Ii#&#^vC{txH zyaRX}=zuzTBN)K&SA*_kGhVm|Qg2xy<;wpU(9Pt(vKG{i=x+a!yv18~l!Ls_GMcrM z-hZ0u`F9H6a2dsp)@bsXhq}v*?IQnC2Z-0Naa#bC(Zof6JgL02Rnth8FH=P5T$cM4 z*N6XqUZtc6!r%1_&~?8-H8CmpMAg>M#J;1YoYOC6LBtU+n|fc!Z@j~uMS^;b@3bk pP)h*FLHITHu~01z*e!Uk9dWe5NO0009K1f>7~ delta 1669 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 ZRs(_>BhUu`0F^A0ga%j!A_xEg003c@_^1E? delta 1607 zcmV-N2Dtf}5#kLSP)h>@KL7#%4gfoicUE;nYX2Ap002T9001|}t(aS6;oO)2cgKrt@CvFD zq-twonro_@{&p*CwbB5MY;H;&9AR62-ZWz<@VE4AZ4Qa(U0<$njRn~ymyLt`Xc7Yr zPW;C;9N^_wQV658`?crE5J&a2g{MGF(MSyx_#E^>kW!?o1Q6FJyPm z1ZMR&cXfcTHweG@NUjJ2%n)`xOWk|IzI5u{Tw9D~q22nnKNm9|r>K8&egVk>2h;JI zT2npyo2Ro6mNX&c2+u*bcw2HdQ8*Gnc8rTxPW_eD+U=R%<-2-V?P_(GL(*ZiU5b@4 zEKfrm01iBZ1k}ckgyH)E))5Fjf3^i1Xb> zGXd7wA=Mf~r>fchP|&Nie_Oxw*6f}Z!PwG|R=QQLE9AW1YGWd(g*pr}!&))ti{$^2 zNVy{4J)sTsn%``g+bO$mlb2QibhQLJtY4Pokoor5^_zMQg(H8kM|M}m+^hc_!pxT> zs2R62g)o|hlJ72*sYp?jCpZm`eapu-o+YR7X4;BvQZ6p%JkB7@OIccF!2Q(dAu5jt z#(XDCsqAmuvcbt!8)m%UF)W3R*TQ~eGp#%PInmo?Emw^;q z6t1IH@OQHQ(bK!r8iv=hwVOn`xlWE_V+Z4M)UHEaVdhxRMJCQnMwNsx*9 zw1`WgZ6bfGoBoJpVOBe85ymLKcYYlhzW@UjyR1^-xx%myN*BQ}k~ce3^S9!+B+$yq zH>RUV+MM5VxrBk46l0*)$85C|8u*?FkvO-wBM%vD92uxyuj288k1ofGQ9s#)AYzW! z!T5h-y;74pRnmBp5MN}CX9t2L9j+2Av36@{m4{DkT28j|e}U@R=ERYL{F=ShmxM=> z?ERla+q06O0Po|^-jXFfX(1+A3cgq+8%s8h`E$w`uu}L2(8=at?JGhJ96P{geOTI2 z1P16WkR6sq>smlds2Tz8(lY=1Pr7;IBzu2fe}w24sKLD#@QQq{AVt}o{}H=KZt+9 z+?xVqzK?Ny3vtzTOafoqzCXGI+t**{GDVvmO$07sT-@l;Qv=AdEk@oNbFHhkTrepe z`NCLkxeJrafMpvdBW?lvE50B}1-l^%Nm&p`Ep%&DVa|q(*RM_|u##Crc}ZQv6@)9c zFoVs2zDZa{F^U!c-CK~-P)h* Date: Sun, 14 May 2023 11:08:30 +0200 Subject: [PATCH 2/2] Fix crash when variable is initialized --- .../uninitialized_local_variables.py | 3 ++- .../0.4.25/uninitialized_local_variable.sol | 5 +++++ ...ninitialized_local_variable.sol-0.4.25.zip | Bin 2247 -> 2483 bytes .../0.5.16/uninitialized_local_variable.sol | 5 +++++ ...ninitialized_local_variable.sol-0.5.16.zip | Bin 2237 -> 2469 bytes .../0.6.11/uninitialized_local_variable.sol | 5 +++++ ...ninitialized_local_variable.sol-0.6.11.zip | Bin 2269 -> 2498 bytes .../0.7.6/uninitialized_local_variable.sol | 5 +++++ ...uninitialized_local_variable.sol-0.7.6.zip | Bin 2202 -> 2427 bytes 9 files changed, 22 insertions(+), 1 deletion(-) diff --git a/slither/detectors/variables/uninitialized_local_variables.py b/slither/detectors/variables/uninitialized_local_variables.py index 3f7eee4d6d..0aa5579f88 100644 --- a/slither/detectors/variables/uninitialized_local_variables.py +++ b/slither/detectors/variables/uninitialized_local_variables.py @@ -70,7 +70,8 @@ def _detect_uninitialized( and len(node.sons) == 1 # Should always be true for a node that has a STARTLOOP son and node.sons[0].type == NodeType.STARTLOOP ): - fathers_context.remove(node.variable_declaration) + if node.variable_declaration in fathers_context: + fathers_context.remove(node.variable_declaration) if self.key in node.context: fathers_context += node.context[self.key] diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol b/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol index 82a3ab1246..37d4650e23 100644 --- a/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol +++ b/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol @@ -10,6 +10,11 @@ contract Uninitialized{ for(uint i; i < 6; i++) { uint a = i; } + + for(uint j = 0; j < 6; j++) { + uint b = j; + } + } } diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol-0.4.25.zip b/tests/e2e/detectors/test_data/uninitialized-local/0.4.25/uninitialized_local_variable.sol-0.4.25.zip index 2c4ccdf1739484c8c89730b7f54efaf23f024e87..29db479d573ecfe96ea1e2af6bbf53df42de1cd5 100644 GIT binary patch delta 2146 zcmV-o2%Y!G5wjB*P)h>@KL7#%4gkqmu2#8J70T%d007B7u^1Quf276Z^!?MWMToTd z`CamzD)0N)uJH+6f~Bd=@*~O)JXVVH43_{Y}$2 zR)k+p*2QsET`iiPTw7b_em3h+#W&ueAn+${ew$Yq3zne(5qOIB@{FNE;s~q~F9JvU zxtIb9nYhSg`+{Y;jGz8O&TX|$WNe-sv(#cJe+O|-V^fAXeZa!J083%85taxTjgvoWUk*d%FzlO=m>-% zEzuzw2U;4hgX(7&LhBzCAaUFwyw^@W;Ql2GxqJyF9O_x4B*C8h^%%+mQg@9|1F2SG z#E&D&BRxa_tNn9V!Ns#q&)RFP@v5)eLhz3CrA8+(e<}7zI_%EDK42bIAJf=PC&pnt z;=$g&0l8!J^C@Vsqao>#^*H?%%xy$`=gen(tK5e!%Q&C=%91@QAG$d7TC8!+@M znRVq}B?SiH9OB>r0hmY)=0k!LR==rr%hD(@FCh`K^=y=VtwTNG{d%`w0)|LXa$ zj#@zzePCImf84VJD~mM4sI^!tbDhHE~M$D0<4-;&k?-uq)>f+=!>KE-u|Aicf(^HBz_f69Te_M~PXapO7)G0FB>S`-T3U|D<& z_hl_$r0wm3xKYD}VLB8E<`cf7V-XzR5noUBpoKU@=0jqbUFNqQ@k?Nk3h6oX7LyON zib#-nQR0FO#P<%!jd2+C#!8^e8hL?6mgj4RKV){+f;KLx`}`pHB}2|Z z%MP1^#n4aE6J>|He?|`gsULI?bb~@xHFB+ME`6p9$TQGozQ;@uf!$;cKxYG(+IgJy zPgYs}+%Bb>m~<|s+yyw+99W};_)U*ge^BrMfg~*|$tbuzB;hGl6B%c>mum}HDmTeJ zC)N$P{iITKYeWhJl;NeX?8MDJs-PWX`r%^Bux)V$wqTx`QBCzySS-uB$Uj_f3z;XE zL;*1C6*3wLFhoI}3>eB*YdwI8w$!EPNi{1B=hLp;%px+`x<~8JUU)=gX!(*gf1lmX zB)f`4kc*#EReKdRWqWN`GI~S#GNQ{sB*%FIR?0Ms;@J3q8ng%0tQ=rXjPe-rdyWk8 zy!xeISh&5kaRV%UdVfpJ7-=N)bJtJX9~^5di$g8x@nrDeD}4XE6)*X0fR_CtVY@=J zzb<6#n38omvZNfr3;DiXDs;O;e+xJTDjQ2KdWI`X9g;!KE0=Sp1ASYL$E>QqP3WOw zAq40LxN{BW(Jxk!QTeZ%3)Ht#v{@oVlbJiM@C7^eK4iULF$I!;lRgt6^L(wSkJ)9q z%dcm!j+1*)3=*+-kc4eaww{ANiTbE7^S-eEa619cbTKSY3zv%bg>r6rf92HmQZr(| zMq_EcDB*oV{s2oGS$ciCc+P`{h%~_^s}r1CSdgIwQ!#>bnP1Wh2S5^2$3HTS*+Es7 z`6(weUuyMt-j7y_F&llkLTKcwh>^xV7f3OvG)+U_5g<=GB0VfuOQzObvmfpTiNl%c zc2juB&4+wqDazqw?cXFie^bo?kSRKXK1(Fti01*0AUtFdg#$kZU7{#jI_{$NK=d$6 z>?%E|;2+dNyiFfzjjg7>Ms5y?jY@6PR{#jr(ICnU9w;2;w_K|8U?@_@$HAGK<)U=|5X*^`c7xWDEmOM!e`z}lsh)cpmy2PE zdpcE^e=QPkl`iZq3uMTSll4)R7szK%4dpa*HA&q+hWqj1>9<=9Wc=1I(-a>?RNfnk zlZn(|q%-#PcTRWqoae2MHDZ7gp1)z7us{!S%Yf9E7ru6FrC9r+Q(DvFI_+yV;NZ1?DaQ+m|%^j7KlI3F%@XIH9R&Z@_A!rVOwK>e@%2|&h@2@{kJoAi@H77aYij;$UWL5GZ?yu%ia>ZbSG z^)%RZN^Oj(H3<6^cFPpUc9mZAUZPnD&C`7E`)v9D`;@?aP)h*<{901I0R#{d8T delta 1908 zcmV-)2aEW#6UPx4P)h>@KL7#%4gk|tu2$N-BO3h&0015@u^1Quf2-z?+G__*1+Cx_ zT;0Bomc?G|P)g3astk%p>=GF*j}^120N$9Pd|+hstb=K!fEPoAlM3PJ=~qPm>b3P% z4k%VlDFBA6BYoqH?*8n@>i|)}^MjmY>m1QB-v&A-IWk;TyFoiaI$C0}G|-zA-h(5= zot7Zkx z^8)r~#w4!{Y}(jobA>0n_L(8MxP;LeP4R3#7Q+>D`w4BNe|mKo%qLpV`e6_fGrDFk zvYmuwMyZIu-LdcKpMM_OYU5Ix@@4+vSEVznRG9OuLI@GGeKtY#B1CA~+~m$Q zYNxR|x?lc@f7T>~%LVusjJlC1S+37-9azzdVr_evu@}P`T36*GMnWG*i5K3)>}EBC zFe;L*7(w4&6(|C20|zjP zDGWYAzeFY_3k!_;sLYs+*fUnjeF{co|3DIQQdk603m!4uekNWMH+^-TWQh#&aBd;3 zR%vW=Mla=BKDcM`PT!>6ZSL^iEn!iSuFW3OJ-2d@P>KbVRgtPSa!di{S8Qy#yyaFd zd&lo4e?ts*_y+T%If;WA??jh2#ywgtngL|Y41|=m>vc8K3aIL|Iw-?FW4GeUkbk)ybB#> z*ZEeQVkkNm4gw(J6`{Av4KYy~9|NP-`2i9lf3+Q?AU?eeje;spY0}KgScyFyJ7)f0TFn9hXkKR{$Kndq^o1mg%pSqf})re-Dku*DCp~`bN2iZ6*o6Aq?SH`0P=Cwl6&f zA-+7+5{{1bA1kcpq_)pg`z(8uec4CEWK;t4f%kW0TCxhS_v*)8KiySDA9OTMidvOq zea#=8Z(!4km9k;#Jy+#7!wcmoAzP(z%0AxmY_TI6q=JR@qGUCMBVhxVvSByVe=6c# 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 delta 1898 zcmV-w2bK7x6TJ}_P)h>@KL7#%4gl0uu2zIVHe2%t001&Bu^1Quf2-zh1=CKTW7;6u zg11fe_kIhY|IWYsm}AM-KNJ!yAVoNJd_Ow zTuTH$>7J<=9&Y9Oe-P3lWYFI-t}@UhVUFgdwK;%cuGaakK0OyQr~{mQW^&T}#cvna zG1x3QFOkOVhJ;t;X^^>P@F(F~5=S@4IF=*^w=z6p&NWmad;9DsZF>8*G(GT`y$XN0 zREJ*N%Tn~hG|;-tt^OR!+#Ct%$i4NKu=4Z@4Ou3m=O9b-f5d%)wizl667_U3jNUKJ z6I)4ds2sYn_zS@l<{HxTUJSA*l=j{^?1t(wmmGb?<({r8Z>bl(%c?Pr)Fs;Iq%DKx zm=(|Y4}G2A7Xw@fwZtc}T1bVh`@Y_#C)4>xo%3D8H$NqQ@IXRoNIaskc>@2S>UvqY^-90e$#| zKC<1MzC5tU!^XZJr|5aC{o9VsG1~;i2SL>>R)G+f7)BGzB09LMIrPsHP;XtqQbsOOo)EXf*R`>44N&2n#(n2WIxx~Qt}PlXdhAF zVv3d^=m7dS=Z>^!ApCg%AV5(&dst!<#?Eg;+=dL>dDO$({ie(*W*Skf5s~8}`KkAY zbv^5_Q#g2?)%NfRSJDv2J{^OaF)Wg@*spIDf4=Xyt@X7Eg}Aei0bI=>Iq|@o{Y>!2 zxB?al^hBc%x1`XGU0zAis#qqR4?2KTI+`oTNc!Qb#4rW(lXWCr>M`jW60sdF1zKK8 zCktAtIk&sT4s-MG7|K#9_Cm0WJTz!WCNUFtTk@)R(aak13{LoziFVpOM6u-ZD}f042u)1xSdM#TTbhk?tQHGUjEbxt&iI0+Od z|Dnop(si9&iDG4g_)mk4*1{hJOXw zVl;3Kn8GN}+oRaZlr3 ze40D=)9xS|S3Qf^qc32}N|*|dTC3~c{=&-??g>#`CX%>g56KiIJYv)Bkda|%R@Nx= zs$j0Z2)1DoS(_eJv|-4`eE=4bP-hfuR2bkI`|eW($T}G|w{ma{zK=VN#u-pS(zPhs zMp4v#oMh=Z(Vz7C%|hnbn$Q>!%ML z(+*%U?VFTF5=@4S=O?TLC@J3R2lq%-f}bux9RN;qL=K4BWpJ%HA~`v5v{-Hp9Rj7z z8c1_&i-g3g@`RpUJ#kTB6Ke}Cq$p2m-jRx{-L&NwZ1@9%ZZ$I#9X2ojhBB;hP)h*< kKLbAi0ssyG)K#ulgg`c1^9KL`GA@%x30MY22mk;80NO;2n*aa+ diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol b/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol index 82a3ab1246..37d4650e23 100644 --- a/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol +++ b/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol @@ -10,6 +10,11 @@ contract Uninitialized{ for(uint i; i < 6; i++) { uint a = i; } + + for(uint j = 0; j < 6; j++) { + uint b = j; + } + } } diff --git a/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol-0.6.11.zip b/tests/e2e/detectors/test_data/uninitialized-local/0.6.11/uninitialized_local_variable.sol-0.6.11.zip index 793b30f4a11dff2246e75b96719158fa033a2831..d1ac3a5ab82f558461f3ccb8da893ed552b049f1 100644 GIT binary patch delta 2167 zcmV--2#ELH5yBH2P)h>@KL7#%4gkqmu2wz3swwyg000?2001?HKJ|zj z_4N>dj5XS>u1yYC)2j6Nd~uh}MlOZYi{pJ`K-5?+zX=F1tg1Fg4^|%Qu~OOY91w{p zACnI`NQs43^UhppSV*P~QCS=H(qhU4r`bsJtrxcS&+6{l}koC{{nAP(n7*sy@wp;D%0Un(Vq_aHCJ)S&&6g zTl~nh8m9k5d94ljUmrs}{$?YOfKb(MQ9-Wh*OBi0>3F-WZB;vWrn7_iw& zhW|y2z|qeXlK3zn$~1q#h;O8RP9i#r;BtszU>6_d6K!I5BgWpGQh7DPWWzuyXKTwe zQH`2w;DMhb<1E7g(AlAD)G^3JxTC!O+59RG^S!8L@JoFoUaIvXh@C}>`VDfKnbAg= zzU;ZloL_1$d=K~$arEn+yr}f+1YL|=(VnG&b&^dSFp^PN7s!9vRZiS|<||w}=cafV ztR33Sx~F(w712mL*(c*T56tK^)gdvX^J-FLOFPC9EnJ=jdE(=Q4Y!RE5H$Vl+@OlA z-@!bp8MjW5%l_mVApG-v^Kj@P7S-oHbMH85!JnNC5GujrVa~w-Xj;L)YFA7z4}YeB zf!CRU!ADGAm;!$|@6}8_41+7WV6*?$@S46XOdw<>TBHD%ucgN+=yMfT!d;kW4xljc z$BL}WChwMsgAg;+7r=2xDR&m>iZ%@QSk^@$4#R&Gzxfve{#;FU%3Y718($@v zOX$k`0nFJu1AOjNF;i?W$Ip|y6by~ksU$DX^0A}Gck(AML1ElPCr7}}S zB4JszpKG8%AWc|Y3Xvzpt{h$iJL-8{xo`J-!n{M3CANDp#5DY$@od(zGrs`@%W6BZ zZvaC6gU%L!F!Wug|(<0dI0+nH;=AgxZ~uS;rFHBEQdO zOqFVO@^0?4X{<=}N<{q5kRE1K_KKX$(^2;Z@=N3i#3?-X+KarU9Sk7K$f4Dq!7gRj z&PIO}a%Z2e)$Px1G<4>Xy+vPI<|y-IZw;%|fM>EIxohzZ|N5qL+(^SB9$w4-k6Y%e znqu7bn`-KDS(kJZ4p$iIBQr(>&VBsfwwA@w!gAc*tu=mGbe9@D^{&c&A_^g1RDi8D z*XsrK(SMWcKYAC}rBy0#RQ6?8Y^cGzwtasZ4gQ9pOhctk8)Dy>2CD9#L|OyuG;TrH zSWt&?JwSR=Ur^&!>}>X2Kwcxt|D3WNSkrz2wH`J9Ro}w1=g|_)yvXN5zK7^{`7P!t ztmQMoj6`0hv;XpRT#!Xusn|UHK4Ue>Kyb5>(I~OHs5mV8T}^`W zb~f$>aAbMXS~Dvu%^q3CdYs31b5|NpFc7K`DB_poq>(EpQtJKE&2H% zBC8OKz*W>y>v*22mqnbHF9#VR|5fT>$uU2v9GF|87q*+A>x6nD=8Rgqd#it&f7_0^ z!o&VZr_p5gW({P7Fzc3Fv%MV8*yPR4BLaXD)PmI*KaYPgM-KgN5~#D5g;9ZD(&sPv6jkJ#&Vq#y<8*~I9K$$7 zDDzc}6nl1oeky!hj|b%rIQ_7pYq5Y85bDQ}A!vn9RYSgI3Ep1`#9D-vchBx;2)uSu zXZnvgp4TFC+RPT9N~h`#DCdNUboSN!;~4O#emowV1W?z$+?`oUsd;~ESZC#GL?w!? zN(W)zAxNlqR5q_g<`8DJH@t4Ozx+_|>5;Z!Dk%YKOTob$Az`yq(m5xKiK)*1Z>Oh@ z8{Yk?ZWDj0nQ{RaHURMfwml4%e{aj%W5&42DzElP56v-=ylLIP&6BYeH4`U+6*%M% zuUS|_a+yz|>4xy>7Jx)9Kd&`^DHOs)TF3)(w5=$}^+<+M{daY#cMH7*q`-ze6eH@} t|K_FF-cU;c0zU&k00ICG0LfUcRz1L~DfkEg02w}$e+XCxN(le}001OdGVcHY delta 1930 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 cu2!`Wvn8<{903cxwt^fc4 delta 1870 zcmV-U2eJ735}FYkP)h>@KL7#%4gl0uu2utr8Y9pL005ON001fa+pw88kBrioKDm|ND1P^ZKk>zNEM8=Aq#whCe5D}#aIDPo27VRsA9v4$8~9z+ym zEtjE1U%meuzYQVm83B258dReSp+BPjgaW_#?c`Vc!EKrDJQ11E%iaQokjAWh=8$M~ zPC2YUQlXG2*VcFI>1t?hNdSL`MQaa%KQ>N4^FSW z^dh=VONON|udd5<9J;tETtiH+mO2I!{BFb$ger~9lM>Nb=DUGIxpUauqfKF;$hD8YI1i%uJaH-BllR$S?vH;U z9f~jTW6kr9qCYSo-m6$|xpU)g$37lnrd1G@Ue+rX_;wnQ#L%mu8MpA; z(v%cJgA{HQiEKR9na6*rt_;#2N2p*9?TdcH{}-`8z^T{~G~GNYG0jDd+Tb-^YYvmA zZrm&!X&7(Y4CFv}8HL4hxn7>;)0rgl(#7V+S+N4!fRe%!S}c^R;re{5MsVmeVeCh1 zTw9TxHqA@rt_~M+XJ=Sl>dqr7>!`bH-yZoLewCZZSn3ZkDBagD495ksp+~`g- z6*(%Ial%$>4WP5)flGK7T_gU-0g`yi&d74$MqM1zhjIZU18!R+98^PE9u{m2(6oX^ zK^~0}av=26`Hg=W2-r5eymN6Y7`{pzeK}my99QipFp^*`f2Yqcu_jDy_8f29)%ftu zZ28#tg3)GtPYDY?%d~3)>Q(;vJ z-x{|$890DUi2xYP$7TF2+*73jb*CaKhHbmVNAzsfV=DasDlSZA(8 zuKtl<{z`YgN%QG1kd!bvl`8iR3f||o`f6h`U7>$VtoikWfxxEA!*9L#A}*VG(eV|; zI;gwIRsvqrd35~C$~V&hwV9ekBFx2y3}5ek)Q7TY!r}k%4DkMuuJ9eNU-q=UZVSGk z$}cW|u)2;$SvtUn&pYWhgKrzUE~=*V6NSbMI9j5%L=ve-m9d21(M>yDxTt;)!cW{W zrgncix>{YgeJJ7zkK!n7+iO<{K$Aley|RCDm$)guiGi5slaQ9%;M_5Wzw^05hl3h1>Tbh;99B;g%X5`?B##D z=rT>z&-^I$22?c8jj*m#pct5lRUm8$Oxueo^yS2c=rhXikfm5Y=>uj?*kKkP0#MWz z`v_|!J=9UVKJ&wJ6OZQC(u@-)kcgd5;xcrx7V_@KMK5S#_>eB6qFjl-ST>;{Rt7ve_Kla2Vg4f=}C5}z}?(fy6Tg;jrFg$QEp zem^O9)p^0;ZVAe_-mR)es^xmXnH`<$SzHoXH&`+gN%B$CtnXnf${6(^xv8$PVgx*@*SULydj(h}mT*Y?P@(k^@V;48oqr&5NK$E{=3CfAh0@1mEXI@f zLK+K0smP}Q^WBt>fU3X#Oo1DRP)h*