From 87a11e22f96bf44236446b192a984a4d5b24918c Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Mon, 30 Mar 2026 18:46:58 -0400 Subject: [PATCH] undf: assign 895-897; stamp forgejo/snort3/tryton patches --- UNDF-REGISTRY.json | 5 +- defects/forgejo-0001/patch/forgejo-0001.patch | 1 + .../test/PatchReloadEnabledListsTest.class | Bin 4459 -> 0 bytes .../test/GSCaptureCodecDedupTest.class | Bin 2884 -> 0 bytes defects/snort3-0001/patch/snort3-0001.patch | 1 + .../test/ThunderbirdAccountManagerTest.class | Bin 0 -> 4808 bytes ...underbirdCopyServiceTest$CopyRequest.class | Bin 0 -> 476 bytes .../test/ThunderbirdCopyServiceTest.class | Bin 0 -> 3986 bytes .../test/ThunderbirdAutoSyncManagerTest.class | Bin 0 -> 4788 bytes .../ThunderbirdImapFlagUidStateTest.class | Bin 0 -> 3796 bytes .../test/ThunderbirdFilterListTest.class | Bin 0 -> 4087 bytes .../test/ThunderbirdSpamWhitelistTest.class | Bin 0 -> 4784 bytes ...tryton-0001-modelstorage-save-values.patch | 25 +++++ ...tryton-0001-modelview-changed-values.patch | 19 ++++ .../test/TrytonChangedValuesTest.class | Bin 0 -> 3441 bytes .../test/TrytonChangedValuesTest.java | 100 ++++++++++++++++++ 16 files changed, 150 insertions(+), 1 deletion(-) delete mode 100644 defects/pcsx2-0001/test/PatchReloadEnabledListsTest.class delete mode 100644 defects/pcsx2-0002/test/GSCaptureCodecDedupTest.class create mode 100644 defects/thunderbird-0001/test/ThunderbirdAccountManagerTest.class create mode 100644 defects/thunderbird-0002/test/ThunderbirdCopyServiceTest$CopyRequest.class create mode 100644 defects/thunderbird-0002/test/ThunderbirdCopyServiceTest.class create mode 100644 defects/thunderbird-0003/test/ThunderbirdAutoSyncManagerTest.class create mode 100644 defects/thunderbird-0004/test/ThunderbirdImapFlagUidStateTest.class create mode 100644 defects/thunderbird-0005/test/ThunderbirdFilterListTest.class create mode 100644 defects/thunderbird-0006/test/ThunderbirdSpamWhitelistTest.class create mode 100644 defects/tryton-0001/patch/tryton-0001-modelstorage-save-values.patch create mode 100644 defects/tryton-0001/patch/tryton-0001-modelview-changed-values.patch create mode 100644 defects/tryton-0001/test/TrytonChangedValuesTest.class create mode 100644 defects/tryton-0001/test/TrytonChangedValuesTest.java diff --git a/UNDF-REGISTRY.json b/UNDF-REGISTRY.json index 9727edc5c..c62a69596 100644 --- a/UNDF-REGISTRY.json +++ b/UNDF-REGISTRY.json @@ -892,5 +892,8 @@ "thunderbird-0005-0005": "UNDF-2026-000000891", "thunderbird-0006-0006": "UNDF-2026-000000892", "proton-0001": "UNDF-2026-000000893", - "proton-0002": "UNDF-2026-000000894" + "proton-0002": "UNDF-2026-000000894", + "forgejo-0001-0001": "UNDF-2026-000000895", + "snort3-0001-0001": "UNDF-2026-000000896", + "tryton-0001-0001": "UNDF-2026-000000897" } diff --git a/defects/forgejo-0001/patch/forgejo-0001.patch b/defects/forgejo-0001/patch/forgejo-0001.patch index ff41c3ac5..305a06f8d 100644 --- a/defects/forgejo-0001/patch/forgejo-0001.patch +++ b/defects/forgejo-0001/patch/forgejo-0001.patch @@ -1,3 +1,4 @@ +# UNDF: UNDF-2026-000000895 --- a/modules/indexer/code/search.go +++ b/modules/indexer/code/search.go @@ -50,12 +50,13 @@ type Results []*Result diff --git a/defects/pcsx2-0001/test/PatchReloadEnabledListsTest.class b/defects/pcsx2-0001/test/PatchReloadEnabledListsTest.class deleted file mode 100644 index 587f7eb036cb1741c178bf35edd9b3ac887a477c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4459 zcmb_fTTC3+8UD`RW?2Rd%kG*5+u7L01_P$P1lugWa zgHyFCLY#Bv{O6qS|Nig)&*5kHZhZn^Cq4|p1Fr<13_k)4CC8L;r6Hr}Lk;`-kEsI| zL!epHHESD#x4Pz#gdjtiFdDP8OvBDxPMPe~Oe+Kl-a-^YmQW<47>gK+XYIHNLr}BS zoMIU{hFEn?=j?Qc^F3LJQiLUx$%r7z5T0+sAPp;Kw>m-l5uzh}#bO!dh%@+f@i~&; z+vP`6LggIyQdUmWhdAP;GM3>HLN{ROmZIq0pVd|NdqFVxVhr_9WZ9A9@VFNZwcuYnkHZfH0 zSFC~IgKEZ5(rvoZpHb61HfE2?15}xtH_@sNa?Il@!!EZod{xpF!Uf0f7z+cAW{Zp_ z4rTHD!`ih8HC;e9%`&!vG*`A#F-Ci28NTuYL#+A&Nx^Iw|fjOFWERunp zYo|_<=n=vYh9zixvtx7oZ8gS7ygXK|Zq?hLN%a|wO3-B($mT27T$f2WSxx|3jjW260Qu7@WiRWPy`80k{7&bT0@4e7KdM|0;MOo(O|u@0zh4;GUD+2+B5 zv*1Pyd;f2sYC4FQQMxs_mff0};akEtNq`GXQLZ)*WSq-2lrqM018Td*`AmF4kzUK= zMVYY6Ff7x`DcLU78aC2q5U=yt^HTOS3*tKr>)R%>RJzr4V%z$Ogqc;<^jJ1AXyg*} z)4VP*WLODW_a;OAL)Xm_xwB+Z0B?nG5pPR)hfDSn!^&AnY5KS^qBhuM*tb@@GC(hY zNrnsVtaA))XZ9$1I-{B^I}KxGEbEBFeW|%5G-qMYWL90k+)cjytVz0ShOsj* zPSI#7wTxQ-n(JUc&TlXJVJghM>{=`(pX8QxeAk5jptB}Q)Ima zfoYUTD3nlIa|fQ8!5SLiC9(I*v?IM9XiRRiGI&uy-_PI1ioV+GsOsjOI_fm}^3M1j zDgqp-;|%p2XQcYLbQ9H_ilVrm_Z?^Q%LCkVPNl>r#rkUAbJhomf#A#r0p7Pa_;oxm z%SI!L2<1A$x*lcNNS;1MUNoYOJlTgWIEW;Uq8ZN;Kc`3uXRrgW)9Z$_(tyByB1;my z5H<8$BYrte0Ow{Jr8aA|bBUs-icJ)idJhQ;NP4&0baYdQg)?iY?Z=)2IDlg+eRJw(=KvS?TuM?7-qnP-NcA`=+D-zS0 zp|$?ZWs;{*T7pt_N+M^!UsoUZ-N5=L$?j}!3Vwv-Ma1J0-*dZ=^lj|w3%6cJ`%mbk zzzuXX7TBGx#*na%L<^#!_fRAZ_j5yUV_~$g6rWv2+&Q7wIiPo{kk0*6sq~A+!W%fa zN%l4tM~kC{mr_^1d$ym9TtLe6Km?tY<>3g-H!mT~2`vxb!Wh6=b!N-m zv*ouik)J&rp1g*y@*;2N*qSy(6`L_g^eGzl|&|;5dE^6CcCEPYKBH>A1g8#r-?gnSWCM9z7SmI6=4mNfyTQ ztb*DEUSQRDk=5fA+k}_cc52)33hTnF>=0gK{q&l7ncCNIhMmP(_BPJ3E7X1$Z_pKW zo?W9C#HYBxKBM;MxX3=oJM0hiDEKSh^_1e0CyMty8}NbW0IqoY@S#Y-L4@y9VGK&N zudB-OT1PkCUC{sT6?ag22mWc)+XmC9X6!CJ><*URgUo!?iA-aWXz!uh=XHOWM%w3H zN(JFtGk5Doaf#A38s2aXCoV$rU4_s4BP3@-kiTbn5%$9)@1Xynh*ut=GdN3agvJ+W YpL62x8{+SIyh}47`uZL|z!k**4GS<-cmMzZ diff --git a/defects/pcsx2-0002/test/GSCaptureCodecDedupTest.class b/defects/pcsx2-0002/test/GSCaptureCodecDedupTest.class deleted file mode 100644 index dca8215e4691aa1b7676d132a4d4cb11ae3906ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2884 zcmaJ@%X1V(9R7M=vzZJbyUB(;2y7q=fxLJb9vdDZ2@ps^bR#jK!m!&(hV0HPGqW-A zi5e9nCof2u*gcx4EKG^Sepe3J4JqO)SgIt7)eV({rsclko@0v>S*HOuHFY*W)mWmKb9!3Jz3 zqWp4BO0+T`)G62`LcMA#C83@nv;^>kYKvzI>?aS@tCq!0TO-(Anx$S$^ArPfRH~KG&QR$vcNlamgm#;zVFp2F3ifGM zMzxb;GU7NQ+}H6R!k>}Ri7pA<3Xb9U@;#igY@VTHx~dz4T82oHB~BL6gdPPaaf;eT zPDqm9P|au^pk22~QLbjkU(_+06hcN*Ldj^f|6nW?rG}92V60{5NXCjrM}!QE zEwZv^IIYQ;F5@%?Bs{C&IV2X0;jr(~Z9dA$^U{Qx&hgVD!u`v3*o}w>I$EZ$kVPP4 z2roz&7Rk;oqugcWNNOQfSD{Dp-Q6`aR~g@d}BHTgU%G$0i1g+6y(c5W5x zuPR>PhyY5zFc?z8(<@QAIfEFbvpLX_NC~`_!!4E=p*l zI?XX@?Bvs@qrE^07u2B@CuY?kLXc54B398*DCZ(GGHiP??cS<#!pNCPeoPYp*DsoJ z`JrwRX%g2^a*2}x8_mi@1tnp^d~ zhB2PY##d@q(6emf;8d2c5?&}+{smgl+&N2bicU41PS9f#XHa@{otus&xFz8#Lu>`7 z)u2k4Vc78hp>$UAyiiA1pNGuON-M?vM>Rj$o}NtlUZz$pl}z+*zYF%I2!u&rF$^dO ziaVPUh|r&?l&Bni0BQIxih8%tL1yS{nnNkW4Gd7Fg5f(<_j}uXjn3c!f0f@It`oKV z_<=xGp!p8g-$0SC&36ldTTgz8_-0Yu*gS`*2Sc}>eBSs4E#+~*>>?mQDS-*mD;7o! zWpq)NqZbjnyDI3asl@ZB!dZF~FJe77v9f5!Mg$&Xt%PC;p?T2dUd^ah{|KJHq0kq$ zvqX*()5Ae+!SWiFek!{bSU$jJVjJtrv+XB@4%--2TsFR@D&HKoct``KQB4Pf2g0OiUOO6NaY!l;F2e+0{1xJsjN|@U{gb!HEARN}QPKAPxUP zBNYL@H|R#l5qTkk637J+az${aLY^`9E4OhX+$%kVXV_bF5B-T@9}Sgb(71;)iD5ql zEj9v`is-z9b3+dLno6Y{>h(_%7T7D5`$z(UfXF#=2V=s=dFxyvO90LAVF#ILCmClK zslOB3N&QyrrG4Lr0eZ;Kp&b`+kgOBOIF8WG-GLnK%nTXrV|3#>J>j3>IKD;?9?}E- zJx<|wD*vRHID~#yMMe~s+YNahC1kT=_6RkP5p%Y)_#b$vy>1=~^HC*4wsgys&r7D5 zTs)6^oP!61!Yy}@o`pom!{_}9ZA+XM&Zbz;507$${w!e1q5LXdqq2m^U!gp&JKs0) PKK04e{s151BUJqhX?Mj5 diff --git a/defects/snort3-0001/patch/snort3-0001.patch b/defects/snort3-0001/patch/snort3-0001.patch index 084210ca2..bac789414 100644 --- a/defects/snort3-0001/patch/snort3-0001.patch +++ b/defects/snort3-0001/patch/snort3-0001.patch @@ -1,3 +1,4 @@ +# UNDF: UNDF-2026-000000896 --- a/src/network_inspectors/appid/service_plugins/service_discovery.cc +++ b/src/network_inspectors/appid/service_plugins/service_discovery.cc @@ -1,5 +1,6 @@ diff --git a/defects/thunderbird-0001/test/ThunderbirdAccountManagerTest.class b/defects/thunderbird-0001/test/ThunderbirdAccountManagerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..fbd85b5fd78209a5e71a6e6b922777e53897b413 GIT binary patch literal 4808 zcmaJ^33wc38Gir0X0jR5%{H54p()eSK+>d1TiUcqn$WbRbVDxLq;XRYr#sVRn%$YO zGux-d#|w)fB8m?RElRZ>@c`wJCTY0@#63hOh(z)qg!?mL6i!RB%Fn^yq-B0i}WZKXJn|Y+tG9CG41uaB}am@ zwFe;}#H}i4h}ISCZZ=aXGE6s(_WJFd%Ug;HL( zI0uX9eN-cBB6TtM>;kXbIp1Ol=R#%>bVJql_V41n^B5izur%+mqato+bYqljSSFzs z=hI1ws=kHvh=4kV@;Q^YDb`qAqj+Ax9c#cc0gVi2%`wm>*WDzc87mn?-PSUSZDtrM z>k6Y7bJxk2)woc=8VPIB!VsQQm1iLz#}uni+e`7FERS%B^%7dq#^5uY<%+!S;wUv> zgM<$5qnI=eThR@x1Q%hWfG!D}u(>!e`z%{a(-CHt2R;`|-E1D9c-a&+O-Z+lxR_y6 zM@NTjk7X(DnVot@U9ocI%2jQ$Vf9+0UCE@GHSAu+P)4@%e222Y3 z9wn94ctf2(Uqco2nCpL-u zHeZzv+FYg>s+soF5&Um?5H|L4f3Bh0uj{Vg9=Pb$1N`qG-+8x$_u#$c0`H2LL5cJc ze#F9HxRx9EejbD(KyeN60*?;_@c~>f;06gF#Ep5Na%}5W>@jMLw6d4#sV+t;gVaVh zN%$~srrt6X!yMGpIS}jSYCg(!+`^f=yX(6H8y({T5g#X$2D;*L5w{VwwJX*m;sC?i zT1)Qhs9medvYM~9j@tFAVaf6?UNrd^!V=x=sBK!cYj3R)#2xsgfKTzn-I<3e$6)eZ zqyFQdQ{=9@PVoI{d`7@wF8SFaS9?r@Drq5wwjj}bkz_uPF9?|AGGEN+$T@9`nWe(z zvE5QAm0KpcOYmh0U%_2e%T7yEX>BMhEjI~oJ$H(cfl%nHlnq^_w!g2x|GS zJH#3hM;v0Uh-rst5pmQZ)`@t~A=Zm{*dbaul0Pcp8+eQlLRIZbrOq(cMmU&!Q^L3K z1jE_7su{L!?~BvGO$}L^S_BsbL3F)56)fr0#=}k#!h?v zh=^yYs&uurRm5`)bwOTga$cpJ(Xy7-Chs)uF*&W-W2S1!%4kN@M0}6XBS>z`HsPNo zPjFaLn}YZOekkBa5`N5Q(}Fql*_;-|i>xD*79`6P+as@+g;|x|Y9Ka$X)-gPaioO-gofzK%zwfTe z*_XU`IljPTY@9~wC?)_hM0hZm@P^d>gs+^v(Vy^_dtd2K1j-lQ(BI~Z`r7&je~P$YDcg%pJfSVEO$HwG(1)A-1ZW^1@QT!D|>b_c}p zt&{MFKhajfb8$O4;z@X;6_kgFIE{mpib^{4y7V*-Q4A|dyGskz;c0v>egt0{-Y>Ap z6R%SWD-vEek$3Y%evK#cULJLN^XGDMKi_yDx8`^AG{x6uIP)={r-z(fl4|q2E!Y-_ z`km5l6QV-CxH*-p?lv(Rh>A0KgwSGg_C==%D#H&%{nL2dcL)W!rn=!9foVK>+D0V& zZAaq3DFS?*3lyz)hQCAA!bA35dU80-Vbc+;Ai9-$WCQh52UejIEp+1^z(!n4oqh|p z;BG>yC+TYW9Jb+k#PB=%l>9GZjG>PO>2olI0ai)$A`G$%FvJ?Moo&J}>&6J{#}209 za+b!G>>6CfZlZ6oJE5@0==lVF;yz2?S}$W4`wvDvRT%S}1I;62x2GQCo*|??1`N;j zFg=Gb;hDnKo=0GLo}}*&-t7lbaRLJ;QD@aGSuQ%SCvoT{0WXoAm?fx^=G$V<$9(Ej6ClF>nBEtW}0{6Mp=j{@(WR@b5gSojAfD_Oh+-o4auaTZVIKQvr QZ?qPq_rK!}{0q_l11#>|Y5)KL literal 0 HcmV?d00001 diff --git a/defects/thunderbird-0002/test/ThunderbirdCopyServiceTest$CopyRequest.class b/defects/thunderbird-0002/test/ThunderbirdCopyServiceTest$CopyRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..7a3692854e43278b9ec1d4a2037cff3128553fa2 GIT binary patch literal 476 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 literal 0 HcmV?d00001 diff --git a/defects/thunderbird-0003/test/ThunderbirdAutoSyncManagerTest.class b/defects/thunderbird-0003/test/ThunderbirdAutoSyncManagerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..ef32b4ae564c7887f6fef4582e26dca14743d7e8 GIT binary patch literal 4788 zcmb7I`+FQ!8Gg^s?9OH~NxGX(k_8%;wxLOrG-+wKut`coO6Zncikr4<3x#QRl1#Ii zU3O+eQ$V}~L{z*B6ci0;L_xV|nzUR*6a`Vi3wZeh#4{C1I6<0D=s` zI zHaNndHs-OF?r(~fqaK$^2rIY@YZ)qv*!r~$ff>~a(&Z~{U9L^SdWL|b!8s&m+WM%T zm2f#jby0D5Hmgl>+sSBvz`-{0(>HR6G1q{lAh|?~f>vxIJX$jO0aVCnezYstj4fm| z%Q&t(wv73)m4UU%s6|A2HCQ;tZf}I z?6D<43JMNNpwP+N!HJXInl%>JiEbCC+l>|p*DNwME%NzY3a;fO{ljU~)(q1s!*$p# zA*Nstu3zlvDa+O;h+sNLJk&g7Bi*)_{BIKwU7P6eqo1LptE($)kL4%|vPX<;vbDXv z{fcPVw7PS4IzD9%_iLs`P725JaS|SE95}qCDNNgB8H3m>;RXdCLA>C?#fMOUW%!XP z^8<{r-;aF^o{`Od9N_I1KN7sX!jD6|-74c|9F}m4f?J^#I67u?;>4nC)U14_H8hs` zCZDVwr5VS?i1sj79Faf)u*3@#(=w6}WURxO0s}{hz@(PS={!Sf7Kfi3zLdW8NGX^A zaTGG#-dC2!jfY&NzK-K(^tkD)kjitz&{72J+vL~oh0UgMZf>9qF46p_g~nqp<7=eUA9 za3{sVdd;%*tZk%CYnNeZM^an~qp<%dLtQcby9-j+X0z$6A0H!k^rUm9ZG|UtmK~nZ z?BOvPci|Jf5`S_@02Pe5pGycqD&6-g_!RDAsGZQp^`5jjtl2yZsYfYETDgKn^}|ib zAQP(?iBY zzM|~mYQDyGJjjLj>}lHL+e!HNKR+I!;?$zACj`HGuqSLv?&H0>M2_Z2*arzz!}q^6YUERA&6o*$fqi)#aA z;t%Pzle<%?uub7?g)=;GlAB~ai{~Ufui!`gKCCK+Oizj=C{mNUWn}f_g$Rn!JWSD!^`I; z9#@nA*QC?7WoNZaziyAEla?QEFf{TU4G*WYSt_TdZduWAu{`EWlWv8(!px61>5dq2 zsxPbZ;WsjVi?<}a&8yMx7}gh~*Dxp3<9b`3TE0N_YQyw0oML#$^@Nj%u3#R|Zp}=l zbZdQIIz67txL$R{TpN{y%A$=!QyF~)@lsP3is*6`Jz6Rir+PDCTVW4#Z6$}q!9d)W1euCPl*c=iU5b_}6RlSeE zH|=4w=l^oaQ?$?HXs#y!z$zLA=<=CnY+Pq#edn1_396MZWI zO$2NsLTILUehaLk>%_J6~Bh9V?y z^%qImOBYzaO)RRUeJQP|=ONh+DX-|v9_O)efqXe*n;;EB-)`hFEgB}o9V+cEO3%%`+;u?zJ9hjmg zK4-fM!Z~yjTM6APQcAN7FO#pFq!1oJ8AT#Io1a5(ux}0n(u=4~2*IIvLJaPYC%nNM z;|X8zV0<1o_4)E^G%eB$tsUXh{il&6%Zv;NoN&Rt;ntQSV^y5T=mN$Cm)l>PTjr6D zh|R6@$VI%*Vd?}{tD@?C3>BwwS0Z@#NqqceXF8yYG+WMRPhy(pdR6fh?g3@kfb@c# z5LP7z6Jmh4Ql^%v{u#DAB&lVaBC_kyDCu$V6YUL?>8pwM@t@LG1pf#i{nhjOB!;sAYY zxI)!xbwMbvthz*~x+ZYHTvI)duil@&O082@8EKJ4y9oF2JDn8iMNj@^j2C_(>@gZL*7;eFi1yttWF;V`Sm zEvx~zvaR%$Hb`^(Fv1RFl#O7Fnbfy2&hAEvO=E&RN}ozkAj6)-ZR{0f+3WPN^A2+C zJxsDQxZP8aNzYm&JdHT+X{XzOC&c3joJTLb5?*n#f)b;iO8*&bI7@$4VAbcb74o7* zD$B3Ze@0U0sgBTJSW0$YSfmcAa<%;jy_9P2!$UAGK1YvFkvgl-qRMU8ib6M)p7WHj z(lT`f(vP1zHxe)WTb-K;2m~{8c;*BoaTcQRJf@1aFI--npBElwCw*ezH5z#E3;dGW aO6vWZ^t|r;{tCaRIhn?Pz&rR8LjMJVsl(0y literal 0 HcmV?d00001 diff --git a/defects/thunderbird-0004/test/ThunderbirdImapFlagUidStateTest.class b/defects/thunderbird-0004/test/ThunderbirdImapFlagUidStateTest.class new file mode 100644 index 0000000000000000000000000000000000000000..7c7c8e554638415a6a515ec47f277dc334a573ce GIT binary patch literal 3796 zcmcgvU2GHC75?sw?Qw>2{F98qU|^sG^6O-G!9a+2Nk{`ulbEgptYKR+i6@D{9%si+ z2;GJKA#{P3N>v}W1*x=AB~%Gj>b4D0p{c5U=#NzGOX&+zrE1%1+rG39l~#x*J$G!A z1dz6sP#wkh&Y5$*^WAgKJ@@)Ii$7fe(21)u1c(wG3Y>5;_)h6ldTUlU$66D^r;L#z zgR3KBW{NK|i1iIetKdeJ1X;lvC=8ni$0yCSVGU=jbUdd|^knt1Bbjuvs27bvqd?Yj zA#W9pGzkj~!ihKss8-|k)z$4l{UP|%1bg50JT3Win8 zoPy`Mns-^PCo^rN zCG2Eax19UVilfh3R^F2F0z~d*w}L&`%McthiagbYuCo-G#~j7E<~{`-Tr;pr)Ar>C z)zZ$xoynv&lD914XcFOe?a(9Unr^1GgDYKVIlVYCE&?AMcB7MFqukQcveIJMFh|C7 zx^-Hk7ZMIsO2ICnmkBSQb5gARYY z0VE_GR`7Ye%uu}?pnknbMJVRfILhEQbu&Mh$x-NO)AVwfS2#wB zEBE#`^t$%jR6vpX0+HasaN{J+dOG8MZs-iV>I&LGtS*|?v~(qrvAR8Jv!H3CJY|&! zOQ(W})kU5govt%wjDV79C>X^UgMXPYEy)-&ELz}{o}Dxjqm)G|uoXpE*4QT_gHsYt zbBye&Mfc@R0})hVy{?v++0G1+M-C@5l*cC@`W zh*!r`w#JDS9!rgBUm5O+Eq#VTv&&<31+A(OH_lRR%AMJ)R-`sn&?flSN=Ib8jyEKn zQ*a({(l%L+-+?S?P|VUsA!8ZoM;nBl5~~#Jis(r)Q`U1nXC>jT%#_6G(WMLj9Ci5-zU_aLIydu49CnlijH0WPZ{b zF?urG^R`cE(Gk8zY@tdNs3t}Frp`_?f%j;@w~jX-dY0&)`Vtu4qS^Q1AYCBVcpI#7 z!(I6&kV=C`jD9{rHAbx)pZ;@(=V1TFr zn~2h8`rCv$iWnzU4RH}`Y+p5>P<%MWinAEm@)*@{XB+0>kA<&8a_|5w1M~A2*p4a+ zEeE7DJcOU^r`7RZTju>r8EP8^m!mDrVm%+j5#lS;%oC2>vV;1Ou#8j7eBs@y1w^Oe+}!KeBL=U+uvGZZ>W@SNO=@5cM8$7oRMU3_ zqdKTuk%QIqICdq!*SF4Bi{tNIr|tggO*jKzY!C2Q4!M5@AtiSAsl3>6bMX?lpL#MEQ~y&gLX})l8tleoNAu7BZ7QOr zRJ1>vR79UaDu~MeJr$REDyAtFkGeP8jyUy$cIsU*+V3x+4f}D3eq5ZSd({*U;2Y@1 zbsWSTNf$`>cj(0*=(_bc^x>cA$3qM-5BgaRU9!SRvM2^w3`bZu&3j39m@ZByaGVX{ z1UrRS+1F`&k1kF(=*sjx46z^3h3OuR_c6>qLYn;ph9F>6sKuDDhsF-Xg)W>HdXW`| zkP}Y96sC|D&S65hgx7>`()evm3O6w&`~qi$UtwDKkmmPDb{}sDf5AE7?>H~~3vY^H zoENv^EwK^rh^@FF?!}BaMB^wfiYDF_U&kf!DlUsRa7Fxp#$O^U{uWood-xjfleEr; zhiIeoYi%$XUZRV&OTw4wk&Y1i6yb+jGvw7mCZUVJ1s-4%Z{3UV+uEOC3pMdY1ek+l zfwF8p$^H%RlcKE-u~WjOCCUw*k7c*OB7C;xr+D7@>^)P-T%iNGbf?%!BmejV?m2wv gTKTB_5$YdRnym_W>=VZcLD^5gfAAHu5%AUj0Q_fAyZ`_I literal 0 HcmV?d00001 diff --git a/defects/thunderbird-0005/test/ThunderbirdFilterListTest.class b/defects/thunderbird-0005/test/ThunderbirdFilterListTest.class new file mode 100644 index 0000000000000000000000000000000000000000..f268ecc738f0a9ef814f826d34ba3dc47b6f74d7 GIT binary patch literal 4087 zcma)9Yj6|S89mpMyz+V-+rl!40#Op2*nlu0U_izcV?r$AM}i1OkS1MQi@ibGb#_<8 zPMc=hlB6YV`feUglaxN(rjNW@V<7LQkEHMSyFdCXGnr}oqcfc{3H02RWXs@m>hbK} zz4yD{{l0V0ckb0|XHPv3pc{WxQH6klpoS2t1sZPAkLc|=-5PBl9KOXE@dT>3nwIHp z69}}n?NbmISUhKx_8ik1-BB=eS;JAGAW(~1XbS2yT!eaoi+tOHXXe`bOqcG$re`?1 zXFCGTt!;gC!>Lk#XDu2LQLsou6QTl<3rz%+G2I<7Cg_h*9gs5?YgmGqK+y8Lo65c` za_Lm?j(I5-qgSyM%QdXP#R9dS-DlrsI6b;+2+Vglt~@whQzTEe2-V?bne&9d}kOt1X5jH zU2$)$KoFf_)5#{*ty{M-8MoYicXXGTBTFQa;yreLyxnd~)mPH^Lct-Uv` zZ;R83s$wUuR_=nyx;aGssVIAdDPeaarD$ z1{>o7A$L4y5`ilgTB;J|()KH$OfB(w<5ypId7-Nv$L3Dc)$+8SH{wl3$ao-Rrv3X>N<-a04vEb(8b`aHv3x;(6U08B-O! zr_AO##z?NHxLu0*`{wa!k8Wk{e27~h|5mBE10RqPeUMt&y1Q+k?6^zA-MELvAjLCf zF|A;0sx1}a;qYO(Z^vZxsRbw?)qYa|;_k;(+=q`T__&5o;FD$D_d)B|eSypC6WoB- z6#c4HiBD_z3_i=cv2@GcYvxG}O8IW-<^k#BL20~uciZmj?S9}u7@ucc5~(mAWouV= zsxOQ$2yAR|Ej#olJ2vuQEn0euBctv$vNM` z6AGS`bDk>il)vsyyFl(rsCQP*Dt2?;PCTRG+xQN(!51yYwRHg^SMs<_v$v7k6Fgqk z?p!YJQ5f9#xGbdXS`{a8O2KIj&&mV1evbb=Ia&~ntl^rDk)17vqAqezdh9F{sP8i^ zW56$oy|NrBptKk{+^>(9zH8Fvs6{PxIJWtGt=U=uS*Z}Wbygx$>g0NP-K26i&r`@* z=~nPPZb2m+vt|7QfvSTkvTy51u5`Uo({{lbF({UdX~o;h=URydw{3@QdoE9&@qWV_ zv$H%Dej=dFN@y}J!uT0`d;v_x)K_SyE~!g%L}h*tE>o49v! z+*rW862bXwc#o2VFFJkFHVj9bm!PV1z#fHzA6v(Tr<(fgL~$FVJEsf^VT-fuf-C zEo@Yh%h=nVb5=zDvKK6vt$f`7ae{JwJVr?H+%Z0Ij0F_0)Fv4M?Z63O5i8Tqo4 z*jUBvmYf&99Fy_Cx={Qpxc0@&B97JEfi2AB8eGQMTW~!tFUNlti~aaJn8KTAXZ&YS zT^WB3UdDI15d^>LAE+S$5HCNC&Pew(dK#*q!_rJ3l1gWSk!#bLkZe^)`qLRDGMLVU zBiE;AknUSOgG@gkHxF>)no}4CIGOFlDI6-bM<2q9HIc*9$UmPbz8*#0Y22ELxF=9} zL9RH#Ny@WoCeW~cFcWOZ4rW4);$MTA>c+t9gUMhlm<+{2&v#S@I+Umqtv)WAVxg$A zwj+ERw-e^~CTmXPj!YBoJc0Ko)o3`B>!=NMXi+U1K91$FnwT1`oyO5q_zPse#(Z*R5I%=#iX>6`PrZzXu;QnLwmPJbzHQ}NAKZkJS;VFb7k0hfKhR4Fs zp(+!IMG1N|JcHxJy_t*Nm7l>^34b%am)gpbMKkzjdKym;9aY5C**E0;X~HOrtjP8I z$O&FJ$dv@z`MY8Rt|C`9lItDh$!0i6^1jl=Yrr-j zX8jwzcnc{Jz%`e4!&#Bq;HweP7&$PFnTMbRrw|N0gV8xG%Yr4f sA%rSzJ8w&P)ra~u{D|)+e*cnwe(XPg>OX&u-*ZG|?;r3d`~|W90%px7xc~qF literal 0 HcmV?d00001 diff --git a/defects/thunderbird-0006/test/ThunderbirdSpamWhitelistTest.class b/defects/thunderbird-0006/test/ThunderbirdSpamWhitelistTest.class new file mode 100644 index 0000000000000000000000000000000000000000..19778ef9bff9d9820b13f2815b68894d10fd2e8e GIT binary patch literal 4784 zcmb7IYjjlA75>h=?qqTylSwAY70>~RCOiTH4mcs07(fCEp$-rSEP69@Lq=xi#g zSl>o%v8}Z)72DdTkJMIMUkw2SwGXvgtF^Tc{nJ0~@<&(ur)zbU7SiwBnIRL1uGOsJ z-t*XJ@3X(X_jk_ajkCv30qDR7J~-f1;8Nj+N5FrxKCG`u>6!g2di!rS;yD4&`eY`V z+aTaho-*4HQ5(skgLRC_FiHfCIM%)Y5rD&O8 zAu6pBl@_c}uu{bpQhLrbj!{DfB5r1KdNN~GU^Uh#xKc$JYiHtf$jTXMVr=HQAXqSx zG*|2(Y&rU7=;>B3t`fMqt*tGT8_d(OY=1JFSiW-Q%5WrOK3ZdSno+X=_LtN_fp%v>Dw5iyDs|9N8tui8RO=C_o`!sjZVeI$AG+a`f!U$r6EZ4JJ(2Jt zN|U?f#y6F3d>1!v<_0-Dz41N<(juts#&9wv{qrG)Jqq@!xB;IOn7?y63KD!9?iAtP zNpA(}<1=Eg(HLL_Cx@Bqmlktq+J*C7lBpWQjVf+}&KS+qv^hCqBm}PbI4$(QwM?n( zHg{D}XIw=B+(XS`-69IPq?xfcCM~@`C3OnAw_l*a2GcI9j*`@-Y}U*M$WuubH{$^P zOX~-WPBRnNbA8F&AX`>W&*T`tx~8t#>uCUKNp0t+RjG`22Ouyc)i(vmghL9btdOA7 z`5`mIhb)`{IFXbTxFZ0U6h1T~nXc0_2{Y~HhUMQ9A4YJyG=7KVg00QF<-lDk?zU+{ z5?NO!7vOx-hf&<8;C>Yk;L{~mwXx{YbAwEyv_2x>mOe5{t8rMxgZM0qJfmmKoyj!8 zB~fmbYCbP@JS2s;Zf)M`X}7lmZuv{x#Ey<=)QhjMwYj6K+lxm8B8^t4r>!v&+SJy# zCJ_oHN;%WkxGs^gLZJZ}`cj9~o;2GUTdo)wY0UWW7>+1-T*cS$^-?+5yQW{peuHO# zGOVZah9pAgsam`(1EJ%WX9N@Pxl+y zow80y3zUc-=+TFY{fcOEe}-$aoZEJOS*|aGtmxB*^4gRMJ*!M}mq7ae)y7JnRoP53 zm{mmDbESDq$pk5f{T%Hpc#&B!%anps0*<{@;9Vb26|X41sF}~kjm=33*}{(_%N7|E zCeJmdnX__PeW=IC4Vnqdi=PWHdUuM1ovt1Cn<&ysXAhGoe$WpZA;!6K0dm}n162exV)LoejuVk_? z3`@Zu1R5{!X|}B@_>;iJA1}&6FZhLpJct}5L*Z|brx9CjGC%LUd_K?K0=|VDU2+uS zSt*DY_>|LtO8(^eO9d1a5AqaHIr^5fZOJhx0^64#!yG|2e36YBftOJqacQmzXc4zF z>{)6HMHEdbiY=0@qMTRrYVHXvcnlS;uxA{e@u~NN9`;5ZVtndJ&8@lp?Gsq&x@iK9 z5v8b$tBSfd$W~ETg;rt9hJ8Wb<5;Lw1by~0xsgh(Qd1_-TxRE#wBxbubj*K>4moU> z_n?mLYW4y|r3Q<6^S+#8n|L?vMFXybhF!c*Uyu2S^P+4agolam5iBB^Uy7%>;wTz% z9GBrFnu*2|yv{4_n^=aQP;)nYXHX#&%$=f?SFwMxtDv4g*#a6*!$C1Q!2W;G!TuEZ zoiZ&Ba10anzK=3Mytfnrgkublm*ab#8wvrE(J11zMYf7~5nBn3XQ}2nhUE?huwv9n z)Zf!Qnx`D~Winv4fX5biVZk(9E&LJ!R?+lo0GtFQ$TM0xV;MjK+h z080oO;5q}J^z;mt7u^0g7EHS{i3&P#oVmw*bKT0`d`9P;=ddcUZUPa{Nz})jf%a(3 z6}ToEa|bp?C$YKv1iE8KvAw7G-d@a=Y2U-;zAv+#KZafh`j*d3GlEhWAD?QV9rQeb+7lRv$>wnkf*Fx|$)0Tp zx;YsrOdf|>npzcfAIB|VKqJbFzL?YR>y5emt9oN@f1)?$sTTk2jVRU555rzfi7?Yo zg?-L&Ww0{n8xzkk)hk=V>Ir0tKrS+;2tj0SsZr$&`-A?VI)-+>{QlaZg$4seRcJd_}pRhDy>1Q#TOoV9Nxee$KeiqIWkXX-&g(2Jx9!`&0{_Uy_0y9DG^ld zx2KMKxGz14Z$x8C9ZeP6-Ue+F-;Pe;`+cL8V*G5cRP+?XELpZdIq$M=fNNN^n@A|v zvWB)`1-j6~@3k1VF)g~0!*RTay>ra?1#8PIQVU(V4qlso5T`+zN|*S zSdX~ajD*<9Pmg^V5C`~`aXZKE<%h&WNQp<07GwM_cnYR?1Gk7jv;S8Ni+|vt_!mYT zf+11xDMt-%b2Q*~$4cDcSckhDZMfUfhkG11V$_kseU3YDzvE#%;5fH>6GuVXrCT< z@zS{?a*cf!@@NReCh(&pP+a41IiE-WbRbK|rF7m6huY2$6QUsF{0e@`_hr=fHue0> ee*VIKzGgpvX+PhzpKswk%K9kxd;AgaL;D|>@~_qa literal 0 HcmV?d00001 diff --git a/defects/tryton-0001/patch/tryton-0001-modelstorage-save-values.patch b/defects/tryton-0001/patch/tryton-0001-modelstorage-save-values.patch new file mode 100644 index 000000000..3fb9027c2 --- /dev/null +++ b/defects/tryton-0001/patch/tryton-0001-modelstorage-save-values.patch @@ -0,0 +1,25 @@ +# UNDF: UNDF-2026-000000897 +--- a/trytond/trytond/model/modelstorage.py ++++ b/trytond/trytond/model/modelstorage.py +@@ -2115,7 +2115,7 @@ + if self.id is not None and self.id >= 0: + _values, self._values = self._values, None + try: +- previous = [t.id for t in getattr(self, fname)] ++ previous = set(t.id for t in getattr(self, fname)) + finally: + self._values = _values + else: +- previous = [] ++ previous = set() + to_add = [] + to_create = [] + to_write = [] +@@ -2139,7 +2139,7 @@ + else: + if target.id in previous: +- previous.remove(target.id) ++ previous.discard(target.id) + else: + to_add.append(target.id) + target_values = target._save_values() diff --git a/defects/tryton-0001/patch/tryton-0001-modelview-changed-values.patch b/defects/tryton-0001/patch/tryton-0001-modelview-changed-values.patch new file mode 100644 index 000000000..308941f0f --- /dev/null +++ b/defects/tryton-0001/patch/tryton-0001-modelview-changed-values.patch @@ -0,0 +1,19 @@ +# UNDF: UNDF-2026-000000897 +--- a/trytond/trytond/model/modelview.py ++++ b/trytond/trytond/model/modelview.py +@@ -922,7 +922,7 @@ + init_targets = getattr(init_record, fname, []) + value = collections.defaultdict(list) +- previous = [t.id for t in init_targets if t.id] ++ previous = set(t.id for t in init_targets if t.id) + for i, target in enumerate(targets): + if (field._type == 'one2many' + and field.field +@@ -936,7 +936,7 @@ + try: + if target.id in previous: +- previous.remove(target.id) ++ previous.discard(target.id) + if isinstance(target, ModelView): + target_changed = target._changed_values() + if target_changed: diff --git a/defects/tryton-0001/test/TrytonChangedValuesTest.class b/defects/tryton-0001/test/TrytonChangedValuesTest.class new file mode 100644 index 0000000000000000000000000000000000000000..c17a61358310fc893659c6abca6f959e4c837c90 GIT binary patch literal 3441 zcmaJ^T}&L;75*-}Gk13x!ta9DCeFk*@e&6xjscqm*BBcchrfCWWbGzo*d1WZ?hM(P z#gL}WPn|#aCvDOnJ8_cAQpHmrng?Ri)@r3nmD;yf>Vws%_N7%-sjB+mq9*j*nOzuM zQl#B`@44rkd%knObN2F^&px>WpbtNcpbP zs8mpeYK8~4)PxU)km2Zg&9U+f_3>t(m%*YuQI1;FaYPl=qk*Aj%R@AH&+9_)h=PNNlftY{0Yu}2MHv30gwID69KvH1?4ocuIwKHo(=DE#5X!9z z+HjceLVvEHWo_ZtOOD^GfLehg3LY1#p|oW>nqk^P*rA})wa@E0YfC}3>90srA;C42;&Pl$Zd%XVbH+jhXK{{WP{DaTQR3wG11Y%+;`pq2U&1IJ!<;2PhA_|U? zRUPXsou{f9eTIlTWi60=##o{V-6`?Yums%$BC}%(z9=#q&@!0_k{IWBQo#f!85%sK z{T@7*H}<$LXkP2N-nPTA-(NPO9umF+aM#V}#Stk57lr>CH>hn+LiiGcI^NsV(vcx7 z?$FeJIHP)B$6DKGmYU26p1~Byvx0$IsR~^t4O!+ag%>~XC#?_?3)9GO=)#7$>gyAy zt-^GcDk2&`?YHv8WOo*G3JhE(_PV!0);)gq7BAz{4usy3Me<4NT;i{WKBfW-3zX}e zHm~w_y$ASr9qBwm9py+%(G;OB&|X|tq&N2 zIgOuFD6OIak@+dha%?BBEez|E-O?)*9PerXf_>M6SD*Rt6p{U#CXXwrxmuoo}lAzUTxJ&->`U67-KqxMsJJh0|Zg9@Kp$S!PBdz_Lx87FkZ(SbZc}|fm0N3C0*sZ{If_ZP?Z@? z1*_S=MpIIC;4h;?AK^sJ=~WDfafrrX@1c>FJDtHmrxcZ4YxD;s}{@mT0KE_8*x$x~hB z_2Fyv<=3p^6(WvHp`W8H6>#r8ney&GnUd=1kf)O=xxU;T`L2rFm`<)@c5+um9pATK0+Ama9-q zj*7_E;8EnRu#HJ%9FtdZaDtfDi)-{x#5?pFyorAN2xssS zY5#%7yEunGV-WwK=h;8W&pnK?{TO52xWG;$$!0LlUcr;>ReH(1g{P>eq}Ux?WWS^r z%_nOMm|LihbWkJ#CJczadw01WC!&G%4n10n~{_B?!#Md c4!@1>&=?|%@6zXOyi2PH&ECWN_z previousIds, List targetIds) { + long ops = 0; + List previous = new ArrayList<>(previousIds); + for (int targetId : targetIds) { + // Simulate list.__contains__ scan + for (int j = 0; j < previous.size(); j++) { + ops++; + if (previous.get(j).equals(targetId)) break; + } + if (previous.contains(targetId)) { + previous.remove(Integer.valueOf(targetId)); + } + } + return ops; + } + + // --- FIXED: previous as Set, O(T) amortised --- + static long fixedChangedValues(List previousIds, List targetIds) { + long ops = 0; + Set previous = new HashSet<>(previousIds); + for (int targetId : targetIds) { + ops++; // O(1) hash lookup + if (previous.contains(targetId)) { + previous.remove(targetId); + } + } + return ops; + } + + public static void main(String[] args) { + int[] sizes = {100, 500, 1000}; + System.out.println("Tryton CWE-407: _changed_values / _save_values previous-list membership"); + System.out.println("T=targets P=previous defect_ops fixed_ops ratio"); + + boolean allPass = true; + for (int n : sizes) { + List previousIds = new ArrayList<>(); + List targetIds = new ArrayList<>(); + // Targets iterate in reverse order so each lookup must scan + // to the end of the shrinking previous list + for (int i = 0; i < n; i++) { + previousIds.add(i); + } + for (int i = n - 1; i >= 0; i--) { + targetIds.add(i); + } + + long defectOps = defectChangedValues(previousIds, targetIds); + long fixedOps = fixedChangedValues(previousIds, targetIds); + double ratio = (double) defectOps / fixedOps; + + System.out.printf("T=%-5d P=%-5d %10d %10d %8.1fx%n", + n, n, defectOps, fixedOps, ratio); + + if (ratio < 2.0) { + System.out.println("FAIL: ratio too low at N=" + n); + allPass = false; + } + } + + // Verify correctness: both produce same remaining set + List prev = Arrays.asList(1, 2, 3, 4, 5); + List tgts = Arrays.asList(2, 4); + + List prevList = new ArrayList<>(prev); + for (int t : tgts) { + if (prevList.contains(t)) prevList.remove(Integer.valueOf(t)); + } + + Set prevSet = new HashSet<>(prev); + for (int t : tgts) { + prevSet.remove(t); + } + + if (!new HashSet<>(prevList).equals(prevSet)) { + System.out.println("FAIL: correctness mismatch"); + allPass = false; + } + + System.out.println(allPass ? "PASS" : "FAIL"); + System.exit(allPass ? 0 : 1); + } +}