From 0199bcd44d002a9fe6db72aa2cf9d03262cc9dc2 Mon Sep 17 00:00:00 2001 From: czlonkowski <56956555+czlonkowski@users.noreply.github.com> Date: Mon, 15 Sep 2025 02:14:09 +0200 Subject: [PATCH] fix: resolve final template security test failures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix getTemplatesByCategory to use parameterized SQL concatenation - Fix searchTemplatesByMetadata to handle empty string filters - Change truthy checks to explicit undefined checks for filter parameters - Update test expectations to match secure parameterization patterns All 21 tests in template-repository-security.test.ts now pass ✓ 🤖 Generated with Claude Code Co-Authored-By: Claude --- data/nodes.db | Bin 51064832 -> 51064832 bytes src/templates/template-repository.ts | 18 ++++++++++-------- .../template-repository-security.test.ts | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/data/nodes.db b/data/nodes.db index fb1d9e9878a16922e3f1f5a51ac891c01f4a442d..8cd0320dd3a5421c34061b2fd391d2ac73bc9b36 100644 GIT binary patch delta 3635 zcmXBXWq21<8-VfcztJFF10IG>i}?V}NvwQo1`gIu$_)Q9>F) zQbH;3`+Yy$zw7yauJc^yjJUEY!w8BFOEoYeD5&VhprE{4f`Wn)1O-Lkm|U=UU|_`h z@V>#pTc$P$&Jb}gc-*~U3s4A!Qap-J2`C{YqQsPhl2S5yhmunYN=d0GHKn1nl#bF< z2Fgfbl!-D^7J8SmQZ~v?Ip{sgNx3LD<)OTkkMdIiDoBN>FcqPqRE&yK2`WkNQz8V%5E@FuXgH0aku-`TXf%zXu{4gprtvg^BIz5NNKrJ2qG>Wsp{evOO{3{F zgJ#k!noV1Z^t)um{fi}`6+Duz$ zD{Z6gw1aliF4|3dD3;=AFYTlKbbt=hAv#P)=qMed<8*?4pdaZZ{Y0neH2qA!&>1>Q z=jc5BN*Cxi`kgM)CAv&k=nuL|*XTOkpqq4yZqpt5lkUa`z{Z1SCX4C7#5W1d>n^Nn%MNNhO)QBgrL&q?A;WTGB{b zNhj$ggJhI2$t0O2i@YmYC7WcI9P*yzlw6Wq@oPSRPr$fwd(x=DBWOnS)Y(o?>WUea6oNMHF< z`bmEoAOqzq86<;chzylsGF(Q;NEsy&GFrySSQ#f@%Xpa}k@Ag9lqi`b(K1=4$W-}O zrpa`fAv0x`%$7MaSLVrliID}eP!`EzSt8%b_p(%$$#PjCD`l0emNl|g*2#L=ARA?q zY?dvuRkq1?*&#b+m+Y235-V}CSN6$%IUon+kQ|mHa#W7VaXBGB$d7VTev(siT7H&a zPVR?=G9NLy(q;nH3@NJr@;ou!L>DqW?UbeGShhkPzQUf)Y_iu=KxOP<_&DP3Op2j8Hnyqr!li-+Z zl_CRKqQWBsQQ_avM2ezG6it(93QeVNX&OzZ88nk-(QKMSb7>yUrx;p53uzH8rX}

L^bh?@FXRs!qVN{jijWY zwC8-^#rZvRF?aLK`^*fwvLt*EjZd4rS42=yfz?4lIbwo>g2IA=Mz5War%<3*#LCF- z!ND<;B7(z*+z%dpKiC2kLZK9g;!+sJqxh775>g^cOz%+=N=nHnIlWIQC?%z$)D%u> zC@rO<^pt@GSi2Yg|bpM%1$3q4$4WnC^zMyyp)gfQvoVSg{UwUp`!FL6{F(x z36-EvsU(%6&**b1O=YMom80@hfxe)MREa866{#4C-tJ< z)Q9>~Kk82dXdrz@gJ>{)PebSj8cM@xIE|o@G>W2VG>xILG>*p81e!>bXfjQqsWgqI z(+rwPvuHNWp}7=I^XNzViRRM+`k8*AU+FhmNQ-DOEup2fjF!_1T1l&DHO0^xT1)F_ zJ#CcI!edrIGv!Abc#;X z89Gbn=saDZi*$)D(-pc(*XTOkpqun3-J;uchwjonx=(-61A0i0=rKK^r}Q^Hqv!Mw z{Yx+CCB358^oHKjyD0AdIFf*bNT|e-xDqDuB)%k&gpx=S%X^YUl1eg3F7HbUNhzr$ zwS-F=Nh|3jy=0INB%@@K%<`dRk*tzUvdc%3Lvl(k$t`&#ujG^bQa}nyAt@|Hq^Nu> z#iY1=A|>QgDJiAoGx=OfOBpFE<)pk+kT0a7RFcY4MXE|QsV+6-OQ|Ul@|Dz*+EPdA zNOPx{LM87SY$AQ>#*%MkfNhRQG*E+b^5jFKoBEn{S?jFa&)K_<#1nJiOe zs!WsVGDBv{ESW8HWUfTZJo!<6lKHYgewJV4SNTmA$|6}TOJu1mljX8PR>~?_Eitl2 z*2+3rFB@c|{4RgUCfO{pvPHJaHrXyaWT)(s-Lgma%0AgI2jrj}lEZRDj><7PE+^!q zoRZUWM$XDPIWHIFqFj>8az(DnHMuS~a7iO+C7q;~4Dx|wluVLYK9nqyRkBHT`ABj|PRS*?C6DBle3D-ZNI@wi zg{6oTm5-&E6qiq=gnTL`rIdUopG#>eBW0zWl$Q$fg;bPEQdz1PTIwC-tR)G?YftSei&vX(o}D%R7Hn^rPiV0x8y&p7?A_;&quyr+pe6eZ5&!Aj7iKY?<3NJUBEqv_Mqg zb&|1>QGv0MqiGC{rExT#CeTEhM3ZR>O{Hlxoo3KXnnkl|4$Y-#nnyp z{Yt;lLRv(NX$dW*Wwe}D&`MfGt0{)o&{|qY>uCdRq~GZe+C-ZvmbTDV+D6-H2koR? zw43(OUfM_d=>Q$1Lv)yq&`~-@$LR!}q*HX7&d^ypN9XARU8GBNnXb@Px<=RO2Hm7T z=@#9lJ9L-s(S7=h9?(O2M33nSJ*B_t89k?e=wEt4FX this.decompressWorkflow(t)); } diff --git a/tests/unit/templates/template-repository-security.test.ts b/tests/unit/templates/template-repository-security.test.ts index 0c19c34..69ee618 100644 --- a/tests/unit/templates/template-repository-security.test.ts +++ b/tests/unit/templates/template-repository-security.test.ts @@ -353,7 +353,7 @@ describe('TemplateRepository - Security Tests', () => { expect(capturedParams.length).toBeGreaterThan(0); // Find the parameter that contains 'test' const testParam = capturedParams[0].find((p: any) => typeof p === 'string' && p.includes('test')); - expect(testParam).toBe('%"test"%'); + expect(testParam).toBe('test'); }); });