From 5aebe2b54206f8513d20f2d7b77d41a3f9fab36a Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Sun, 29 Mar 2026 17:26:27 -0400 Subject: [PATCH] =?UTF-8?q?starrocks-0002=20+=20diamond=20tests:=20hiberna?= =?UTF-8?q?te-0007/threejs-0007=20unit=20tests=20PASS;=20starrocks-0002=20?= =?UTF-8?q?LockManager=20O(D=C2=B2)=20onStack=20scan;=20count=20639?= =?UTF-8?q?=E2=86=92640?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HibernateFkDiamondRecursionTest$FK.class | Bin 0 -> 1327 bytes .../HibernateFkDiamondRecursionTest.class | Bin 0 -> 7404 bytes .../HibernateFkDiamondRecursionTest$FK.class | Bin 0 -> 1327 bytes ...ateFkDiamondRecursionTest$FakeFkPass.class | Bin 0 -> 1031 bytes .../HibernateFkDiamondRecursionTest.class | Bin 0 -> 7404 bytes ...cks-0002-lockmanager-cycle-list-hashmap.md | 73 ++++++++++++++++++ .../unit/ThreeJSNodeTraverseTest$Node.class | Bin 0 -> 1676 bytes .../unit/unit/ThreeJSNodeTraverseTest.class | Bin 0 -> 4761 bytes 8 files changed, 73 insertions(+) create mode 100644 defects/hibernate/unit/HibernateFkDiamondRecursionTest$FK.class create mode 100644 defects/hibernate/unit/HibernateFkDiamondRecursionTest.class create mode 100644 defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest$FK.class create mode 100644 defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest$FakeFkPass.class create mode 100644 defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest.class create mode 100644 defects/starrocks/patch/starrocks-0002-lockmanager-cycle-list-hashmap.md create mode 100644 defects/threejs/unit/unit/ThreeJSNodeTraverseTest$Node.class create mode 100644 defects/threejs/unit/unit/ThreeJSNodeTraverseTest.class diff --git a/defects/hibernate/unit/HibernateFkDiamondRecursionTest$FK.class b/defects/hibernate/unit/HibernateFkDiamondRecursionTest$FK.class new file mode 100644 index 0000000000000000000000000000000000000000..419ff91d1ac725b3b71d07b395149d2c1be584d6 GIT binary patch literal 1327 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 literal 0 HcmV?d00001 diff --git a/defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest$FK.class b/defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest$FK.class new file mode 100644 index 0000000000000000000000000000000000000000..419ff91d1ac725b3b71d07b395149d2c1be584d6 GIT binary patch literal 1327 zcma)5Sx*yD6#j0vnbv6wl|@`|E6@#!J6a?vrh%}SSb{;HF71^LozB#mTN3_>`UiaB zK@(6zqS04>lQEv@lu&G=KFnRtob#RUJLjGszYf0wc!>KE_~2I%&=5q3p>Lb-@Vvpz zt^AYCZBdpCp;_J3I{kH;{+vX>*iL$g^X#4yLdinC5TtQh6GMC4A*&0%v)xe%V)Z* z(#etBln%p8svD@=lI}J|Fo+=q!y3+D9Lq9gwiz#>(x6S!T44$rnFy-rB;Rz)zxmvvLDHtSU8 zHNI((MU~bO-+@#QnGDgAY+1EtqtIR04$FzawcUp3;ohr>-4OHKFiN@< z1qN-=G=)8HaK{n!8hphi1$P<7x`g%OtAG$j|L#g})DwqGG&?>T7$5rFfuvKPJ4mz# z=nK++hRbxCaHpL1c;*vWCVK!SlRH541DP1E&>Es07^C$nlI@^z3UaNn%s%<=BYH^a zc>hPt1o_Y?wPScY(RB7Z)VB!w_p;xhuDA#}`aWXd4F+8-xuvSr@cZUY@*D jtwd>LT6-3gw5#MbP2Uu5(=9C&TA>B{!-Y2{m?nxLm|$y!)Qes%u(qchcF8$QlfH?M zp-CH)Uibh$lyMG+2nM3PncbbAZ)U!o`T6VS2Y}buPa=W^3sD<)5F=#H#f2!lLYa0<3FRT1%5|qLJtd5+_1-$7uT}S>>6-m{U#eZq2|v8q~i zg!$x{GrsvoD8s-n3$tjmn&PaAuzkDGV?wm5yIgp>;V5}H>~q`WR^mp79T1iZbCV>S zdgygz%?Ucs{fDysfEYsjkm;*y-&lCcLAN2BzwnLL#y6fAyqD%ocl|gvxN_P%pmYqI zNjyi+LOvjLi$Nz};HV4TljX3FkmH)@80}pWzD!dzb`0U`LUmo~=Nek~hJ(s1zf+pO z0$Y~@Imi8E%0C>z$~2#2h^lbirekD?l%XK6eHic(wS;nI=z!n1#d!$NN9D9Yu8_tBUf8t{!Yo6m*SQo)#JQOajc@ivWOk*VdXawln&qk literal 0 HcmV?d00001 diff --git a/defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest.class b/defects/hibernate/unit/unit/unit/HibernateFkDiamondRecursionTest.class new file mode 100644 index 0000000000000000000000000000000000000000..7ba9a911505fee76807aba1de2b4aab7586c58ec GIT binary patch literal 7404 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 literal 0 HcmV?d00001 diff --git a/defects/starrocks/patch/starrocks-0002-lockmanager-cycle-list-hashmap.md b/defects/starrocks/patch/starrocks-0002-lockmanager-cycle-list-hashmap.md new file mode 100644 index 000000000..8233a1179 --- /dev/null +++ b/defects/starrocks/patch/starrocks-0002-lockmanager-cycle-list-hashmap.md @@ -0,0 +1,73 @@ +# UNDF: UNDF-2026-000000495 +# UNDF: (pending) +# starrocks-0002: DeadLockChecker.hasCycleInternal — cycle ArrayList O(D²) onStack scan + diamond re-traversal + +## CWE-407 — Algorithmic Complexity: O(D²) onStack scan in deadlock detection DFS + +| Field | Value | +|--------------|-------| +| ID | starrocks-0002 | +| Severity | LOW | +| Ecosystem | starrocks | +| Package | fe/fe-core | +| File | `fe/fe-core/src/main/java/com/starrocks/common/util/concurrent/lock/LockManager.java` | +| Lines | 560–565, 538 | +| Complexity | O(D²) onStack scan; O(2^D) re-traversal on shared resource holders | +| Hot path | Deadlock detection — rare but triggered under concurrent load | + +## Defect + +`DeadLockChecker.hasCycleInternal` is a recursive DFS deadlock detector. It maintains +`cycle`, an `ArrayList`, as the DFS path ("onStack" set). At each recursion +step it scans the entire path to check whether the current locker is already on the path: + +```java +// Line 560-565: O(D) scan per recursion step → O(D²) total for chain depth D +for (int i = 0; i < cycle.size(); ++i) { + if (cycle.get(i).getLocker().equals(locker)) { + cycle.subList(0, i).clear(); + return true; + } +} +``` + +For a deadlock chain of depth D, this scan runs D + (D-1) + ... + 1 = O(D²) times total. +The fix is an O(1) lookup via `HashMap` mapping locker → cycle index. + +Additionally, when a resource is held by multiple lockers (each waiting for another resource), +the DFS recurses into each holder without a global "fully-explored" set. A shared resource +holder D reachable via two paths (B→D and C→D) is fully re-traversed on the second path +after the first path returned false, adding O(2^D) re-traversal risk for diamond wait graphs. + +## Fix + +Replace ArrayList onStack scan with O(1) HashMap lookup, and add fully-explored guard: + +```java +// AFTER — O(D) total for chain of depth D +private final Map cycleIndex = new HashMap<>(); +private final Set explored = new HashSet<>(); + +for (int i = 0; i < cycle.size(); ++i) { + if (cycle.get(i).getLocker().equals(locker)) { // BEFORE: O(D) scan + // AFTER: cycleIndex.get(locker) — O(1) + cycle.subList(0, i).clear(); + return true; + } +} + +// After hasCycleInternal returns false for a subtree, mark as explored: +// if (!hasCycleInternal(locker, ...)) { explored.add(locker); } +// At top of hasCycleInternal: if (explored.contains(locker)) return false; +``` + +## Speedup + +| Chain depth (D) | Before (comparisons) | After (comparisons) | Speedup | +|----------------|---------------------|---------------------|---------| +| 10 | 55 | 10 | 5.5× | +| 50 | 1,275 | 50 | 25.5× | +| 100 | 5,050 | 100 | 50.5× | +| 1,000 | 500,500 | 1,000 | 500× | + +Growth before: O(D²). Growth after: O(D). diff --git a/defects/threejs/unit/unit/ThreeJSNodeTraverseTest$Node.class b/defects/threejs/unit/unit/ThreeJSNodeTraverseTest$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..4777bc6e89fb3586857c6eff10e4f4b5338e2152 GIT binary patch literal 1676 zcmbtU?M_o!6kX@Ga-qFNKtWJY7(x31){pVC$cR-2uvC*0CNuvI1VWYjPw6My?2CO(5PI%{9bw4)=M_@g~1=kC4sT5IofUVr%OZveBnmw<(sjktpY z=uqgnueWu+roD~)-PQZ18Y*;5yPg})D8$m46&sxjhoYcH=+^SHzOVl%xj~qKjaV0w zaBQR;bmO4H@bac_%wnZnUo*?T-Zp+ z;-21Oc;9YJ#H|wguD4N0q8|e`jyM>^kV5x=LC9FItts@U+cI}m6*9jiaSX#YMjRZ+ z358>=-1UZ64c)qzFV?-Fv1NREpsQ8$fM)zJ){5{LbMOOBQk5GTUx#&O4Wu(|x)z$} zWIcgXHcmT8BST%S%6lOS_NETX<{>N6b#k3R&cP(6#Et0q@E&$suL=pemUnO#=M;Lw zrsKEFI{WBu)56iF6H)6vlUb1VUSMX6(7X;dD~8QIkC=d8a&Q?}6jFQObM8Y!i}U*f zx4A$x)=AlSaLm6Zfva@e_5~AWHLE7MHxbI(Yl=uerqc)lKlHkK5Qe4zmf&VuI|zgW{j zU;_Fr_a391Ba4rZg&w)z-1W$F0fnEU(;Iw=z~3xSZgO`Ku_(Sj`vNNa685hz(De+7 zZ0;F)o-#n8$p3DJfpBs35=>xk;dT>ZoB&eN$^MB%ZU=`g{L;$oU=(h+pCLYB&ADRq? zd3#4N#|Wx_k6s%S@Az?7^3OcJ{BP|HD+}9HHunFSIxEfP&_xuicdbiX$d+`Dc~!V#3_1v wn#|KIm?42Ii{>I>4r0mo7>tySG^x##%mOnlEaFbImQd!Jpyx@Ha2K8b0M3SryZ`_I literal 0 HcmV?d00001 diff --git a/defects/threejs/unit/unit/ThreeJSNodeTraverseTest.class b/defects/threejs/unit/unit/ThreeJSNodeTraverseTest.class new file mode 100644 index 0000000000000000000000000000000000000000..e72366f3fff463a5904e8a4be39b58c4c131f238 GIT binary patch literal 4761 zcmcIoTW}NC8UBtg-n9@x2t+E7!V>J@`vr^%HYON51QXe&kz)d;khQczi=|yhS{V~U zo3u$tXnM&V=nX7IhUB3$ z9_{(h`Okm-{{Q^rPyajpQvlugl@BhsC3yVsqJklCSe;OtGpcc@d2sZwmarHqw&;d# zZDnxR)DBCK86rdJoTlxH512`9D5p+nxx6-{<*h2dA;ZVu$!KcI2MK;IcQHe#CN?KI zZsm02P-pFMkZf4uM*vG1Zq2G=T90WYRBMlJrD>J7RKv>iyM49uZwJA!BuLgT@gam2 z5^nY53kZ{-1*~K6j~4VyvR7BLrjcY=!{si(EL`d29<1^sf+&NmCX+pBy3a4(_!@W2 zjn#fASVQqs6A5jc0=cGUWX6$#rDvK`1tVeUrqRrOEo8Nv(6`o)DpWHpwu+J6p-*b0 zR4GPqfva4n2dlZoHGb4`2}@@r^lB-}q&}flq8<$r8vSTOb4jw}NAs4Jr5u|DvNU9e zTQ{3`Q>HA+m!@VrgOtivo~`u^ca+QL{3Q9%hK&;1{n*4&uuNc}R4juu&Xr^gA6d8A zj}CMafV4@S4DnEk$gv8v@+5Ed<1TDtSd=gehBd6`bqtRwndVQeA`PB5%55n$U{ygXN6&Vp*Edry;_ic)fOw%SWTU2Vwt zIwi%|oyjN`y<2%@cXvE~cdzoNM_*7Z{x&sudevLa$7z}JT zO)F0?%y_?MrOjks#t*3abF_Of$z+@(BBP~j;ygW{IsH(YQvv*tmw1^X9bQs_3%vQh z=ErHA3Lr`wZ}5#ve!PrRGJZ@#cXao~Iuz1ynFyXYB8cxDAAW*&C0yYT)K!M6x!$B3 z6XuxKY{$`_Fm?zy6V^{T4Jk6(4((KpWJb$Z#Y}UoFy85~x0pi5PRYfgqvKi`c4wwb z+mdLHMG-w}CKIO@sgqoq^5K0+s$HMt(4wr9`py5}y&L*o za%e}?8Jdz~5jSV!zdj^1!1Wo1mg~u=`MgFL^zeC8!Y2&X^FmWDi4uN6ef-9()a&ew zV+{e%MFT2mq@qE9h7g8lh>Fse(brq|9@yKoVE6|8@?&5TWIlz`nzNpxG0;oj2UecJ z;twG04OYH~MVI+%8^{nuUq#FH*|{HL%i?oWk-BPkqBxtgLUOpN6o9ejCMa z{biEv655+cGtf>W;3ks0nMT$Q)S(l1VhgrmD-APuVHd4-)674N?f52fyTNWDb7`b1 zntOn*yXjz^=R@CKw|lUE)oBFk8m4g@a22;-z+z6^!HIPZ?xst#+E)lKcapF^_(@L~ zF|5Ua&{7H4zY&)3tx7tknX0JkJ~Es~cg?CZSoRL;>ZZ}c1#j?7;ZB?0B4{3A+ecf= zJ~DEIYJ5MI;{Z+A2WNa)j!Ha>=WO|&zY|qSH~UE5@>sol3SC|GwC>s(?2gE1A$cyq zL%Th}d!mw)?2AOt&7I2gZr>XT9Cz~fM*{&TJs1f{(X>MZITQS1#Yb@Mbw{QUkMH$F z#m5^t5j|l}VQ>5@4(ti|=4l#@EM4*+r|4ufu-ZwdB7x*QRq30m5*y8 zP$dowA_p2d-UK;LWQQm0;n)lFfOWNd!yX>U_KILGKj3Nn6({je znoMrNNfyMjEQ04)J)UPBG%4JR7g?MJgAu&U#&C)q!)f*m&a#*2p*@RN*hQRYSMVzP zm|oXk;{y9FUSq$<>+FxX$o`Bs*k5po{f*wwf8i|`!@I5^uDI6Xs%snGckRS9uOapc zBG;&KcqBY8L1NV9B)oWyT%Fr-(GKhXT-yiBa}Si?-d%qCAGoLd!RHfmjWQtF?vaP~ zpTo~GN5bJ5B@3Mo7HwPT{2C>^@;bHilrP92Oqfw|W3GUY&q>7&t5BnKQTF6I_x>i& zgM-&URWahGG3zsO?;>euNSX`Z!FM?(=$?e{(W;HUZxi)>@q1SMzCv%A8?WL=c)hr~ fNGs0urucme{NGRfzc&)SvOlAj;bZ(9zeM