From d2ba6bd7254adb26fc3be6250178a942e973ae97 Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 18 Jun 2004 17:59:36 +0000 Subject: [PATCH] fixed problems with quotes and spaces git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3566 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/nsExec/nsexec.c | 37 ++++++++++++++++++++++++------------- Plugins/nsExec.dll | Bin 6144 -> 6144 bytes 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Contrib/nsExec/nsexec.c b/Contrib/nsExec/nsexec.c index c69eba2b..07306fb7 100644 --- a/Contrib/nsExec/nsexec.c +++ b/Contrib/nsExec/nsexec.c @@ -33,8 +33,6 @@ freely, subject to the following restrictions: HWND g_hwndParent; HWND g_hwndList; -char * g_exec; -unsigned int g_to; void ExecScript(BOOL log); void LogMessage(const char *pStr); @@ -90,10 +88,15 @@ void ExecScript(int log) { int nComSpecSize; char meDLLPath[MAX_PATH]; char *p; + char *executor; + char *g_exec; + unsigned int g_to; - nComSpecSize = GetModuleFileName(g_hInst, meDLLPath, MAX_PATH); - p = meDLLPath + nComSpecSize - 1; - g_exec = (char *)GlobalAlloc(GPTR, sizeof(char)*g_stringsize+nComSpecSize+1); + nComSpecSize = GetModuleFileName(g_hInst, meDLLPath, MAX_PATH) + 2; // 2 chars for quotes + p = meDLLPath + nComSpecSize - 2; // point p at null char of meDLLPath + g_exec = (char *)GlobalAlloc(GPTR, sizeof(char)*g_stringsize+nComSpecSize+2); // 1 for space, 1 for null + *g_exec = '"'; + executor = g_exec + 1; do { @@ -110,14 +113,14 @@ void ExecScript(int log) { } *p = 0; - GetTempFileName(meDLLPath, "ns", 0, g_exec); + GetTempFileName(meDLLPath, "ns", 0, executor); *p = '\\'; - if (CopyFile(meDLLPath, g_exec, FALSE)) + if (CopyFile(meDLLPath, executor, FALSE)) { HANDLE hFile, hMapping; LPBYTE pMapView; PIMAGE_NT_HEADERS pNTHeaders; - hFile = CreateFile(g_exec, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0, 0); + hFile = CreateFile(executor, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0, 0); hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); pMapView = MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0); if (pMapView) @@ -133,18 +136,24 @@ void ExecScript(int log) { CloseHandle(hFile); } + lstrcat(g_exec, "\""); + g_to = 0; // default is no timeout + g_hwndList = FindWindowEx(FindWindowEx(g_hwndParent,NULL,"#32770",NULL),NULL,"SysListView32",NULL); - pExec = g_exec + nComSpecSize; - while ( !*(pExec-1) ) pExec--; - *pExec = ' '; + + // add space + pExec = g_exec + lstrlen(g_exec); + *pExec = ' '; pExec++; + popstring(pExec); if (my_strstr(pExec, "/TIMEOUT=")) { char *szTimeout = pExec + 9; g_to = my_atoi(szTimeout); popstring(pExec); } + if (!g_exec[0]) { lstrcpy(szRet, "error"); @@ -301,8 +310,8 @@ done: CloseHandle(read_stdout); CloseHandle(newstdin); CloseHandle(read_stdin); - *(pExec-1) = '\0'; - DeleteFile(g_exec); + *(pExec-2) = '\0'; // skip space and quote + DeleteFile(executor); GlobalFree(g_exec); if (log) { GlobalUnlock(hUnusedBuf); @@ -402,6 +411,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine while (*cmdline && *cmdline != seekchar) cmdline=CharNext(cmdline); cmdline=CharNext(cmdline); + // skip any spaces before the arguments + while (*cmdline && *cmdline == ' ') cmdline++; Ret = CreateProcess (NULL, cmdline, NULL, NULL, diff --git a/Plugins/nsExec.dll b/Plugins/nsExec.dll index f179c646a166e9891ce04b7b5cd56084bf0a9664..19843ec279c030249728b3e5563b9c057ce55e55 100644 GIT binary patch delta 2091 zcmcIleQZ-z6u+7doa!B9(iORvdR_*HqC;D_30ll zx@B$X+v6GZVKQ_m1pJ&a$QFY*;>eJW3}MR0Kqo<6wAzV77A!h;J@;+kAO3BVbKm*; zoqO&%=iWBinrwUe^ds&Iuk`Pu#?)FJqwb@YP}|j$R2fyT&d@EPHgp!~&QX+4H5!&_ zYqn_>La3@&E?Q*p>kbh^w%Tl%7wpy{bfB6+mI{A%Bs?^Mah1JCIq@AZJ_Ci&t&S}n zA1L9XyBPDBtpP`DeIW-~ZKRA6i6r0Cc25;u&k8$fjT1{TYP;+4nu zsclIMf;_0OIE*h>;LE;Z*c6KiY%L);xv(8RJ{Kqj!Dk~M$$JsAK2nWA9uI=+p*pQJ z#o#C>^o@zrDLLyZq{iXcM{p$HBEVF{UQU7*gnOz2vy^qIeCz@dCGKKHtkr;mC1!!5Bxw)vy-9siNGeH2B==P#XIp-UA&S(5J?O9q@w=5&oFu?eZ@I z89G?tH7X}cpo!6NF|2z5D0#2n>X5uK$vY%@2cq04bQhE(l6O3?{I>c@a%OPM9Lj|4 zp?pnn4v8CAG&IN_kXuevLMWY>r*H@S6etlW1>v4#010@B>x=6pZ=b@Qk_%T74_@J} zN4c|PJ78l_uW*k!)Cq$JKEyf%Gyv)#(YF)5c4*ka1$dboigFPO;1ai2=B`Uzo5Zy% zT-O%KyBkJ<)Q5-eTl|zDKqmxjWdKHE@em7JZ6Hb9m3Z>xoHaL&=pk4jwZJ=S4n3x& zF)Ba=A&A8owk`vA&GZg<-A5}N`1mkX$H!~K0iF+O*^NT2BW*-!4jmy7aU5I89B7U* z3=t8qIHm`75wPxP!zyHTsWORouf#!Lc0uHS z`!WT$5qRJc*imN5ChB(M{9pz!ann?mkO~=L;%5%ug%0>~wCu;@W!erTANhPsEOlw= zxVvv>G8xmIV_s4GkCcQ=j)c)4^uZirB; z*R`gs=oN2A=Ee(U@uK@yVEJV6<Z>G)`kX3p#qgp}%}awA%aTGr$3$l;i+f{ftn**w0WKkf?x3=EhwaffPPA7m}`m zunXWt5oi7v?AjkB@1>Z5#gQp1nhd=cLbsesn^f|#-4Gj#$M9v6EG*Z_5+lnHSqAWB znH!eHM5J;;SxYX~4#3NWAy~`tAdJ^D8v~}P8PO&Q4{kcsdvF7zo}5-kWvGj%@1}}7 zJE!MTAY4jg^Ww=(cXGrOPpff7zc{9p#?~vPhu1?r$Q9wq1yQroAB8`LlJov<%1vR18!J$LpVO*j!w@wXS}% zYM*hF{9AS|nVG9ghHTN+hR*e~k5EQnEeMSvHTi+8;2GO_+a+7vW}tIuH@$|gq_@${ z^d7pM{+K>aN9h52kRGCcq<^FTqEY^w{OG-><`-O>~GlLw|ChG?LXNQ zc8W=7GMQZFVTNH=F=b3G)4=Rt6y`N%Kl35e$#gUQ%vI(OCXJoNX0bk2W#27hkFuY# zz3c#cgPmZL9B#)NN2Ozv<1NSAj$@859M>Gfj^7=~X>?kh^PNkbHfMozqjQUMkMpqe dnDeUhSLa#RH?BJ_x_~PvE!b4hS*tTq{{U|!9asPW delta 2034 zcmcIleQXnD7{6<~FZR(wb~whzHkm?TkY4Yu?I;7(9UIEz<^iSJ;wFRDX5hkl`j4Z- zt=W#_2=gWk17t8T>eL{UWRejkHEclwQ^|$_$%y--WK)aVuxjP?x$8s||F+5VzR&OZ zdf(^c-Zq#U%m)Yb0j0e4t0OuLS1NUsas*$5S1VuO8*sleQ@03zrMpmf4aaMhWJ7_r z=47nGFw7N_it`OVU8kzZQT7_L13fwn>u}SUX|vOp(-Itch>(lwlP}x_W}<6H*N1Yj z^iPDm1{}jU#8iMKB5HFnlN33@0g#K$xZKN>fDPwcgNPbXb$UV3u-fgemugBaB@uHe0;X3PYRUU1|uC%ONv1aTFJgMI#;Jnz%< zycd$|i(4R~LiGT-f#*avj0m@er6}*yIT5i1kR#-OQYu|}Udd99C(H|M1d&rJ;$TC= zNC=~0UMe~Y$ZLl?KykP{YQ2k(^%TLH9DO~s)6?UreoZ;pGm}z0`S;nSLJ%;&ARG&+}P=yfc z4_3fh4C(c=SJPmd=#uLPTRf+_x}Zz-r@P<>O;Y(@(bMD02TVQCI>*A{w``-AI& zYXe`=Gdj^Fdd5Z1i0BE6!ldYlh@O~oE-@znO~`OE&5JM;A z%IvAlAj3e$^V7fp09cV79Mg-QL7BZO6*Z^^oXn1j!VTEQpVndsJjQWVUCA=sCzun?jFGn|VIocODTd!BIVB zEu4Y~J0Ow0y|+H1hcFUD1NNsBdM1rcHtiadJO^WfgmFZe1EADYhr#xdugrpt7eQUT z9JEn0EdWc2orJ=+w5vj6)BCE65JN+nkrYKkNQmmAh*%7!j{dq;jw1C-*`4@+P1Xr! zP$D89RB|&0o%cP>fusNtxvF(YWT6wy5b>W*OuH{p-TnD+lG2(yck4VbAIq4&R}2wZ zfK>})P)*mHtKBy?_PlnSdK2k-V>o4LST>+y5>87(OnPWvU~FntR;1+NQ;It!d$m(4i;Wpt@TW@l zC9Mbv4_fAo6&GrsiJy)aQA$^bT-tP7|Fz@N>p4DzgdRkg;5u?}MEN9TZXg2bgQyrp z)2%W#eFv|JR{KZ&0qwnzD%D;nuK}`y0%d|&t4cCdC43)791!l$kk}Y}h)G;{A(X-e zVdum1Ak6x&v;9~=eer}WBt)jQSUhwagl_yYEiUB3haff*dL>4CB%r}PYL`dVWn5iG z)Fq6DBzB->3;O#ddJ}@gd5LLK`5_pam;4!zMgR#3FfK1|RW8kV6`!XRr0&P*?$1;6 zZ~(W`m`u4WTrQWLDp#K~oQHXZAy+Kv%WzJqNbgV@@XWU}a@Wmx9K*7KmH^p-ih(u) zRRGljy#@4H9)_KS{VY%)&^4eDpa@XnLJZ3U%2hnZ$M7~~Z-(+e#9XMf8(&O0qpzv+ z@7`AFSAI6SQZH(#X8W$EFr~y)nZ6u*rslP}?WL8ws%o|?7fsa)Ju{;I*L5$Nm8a9~ zs_QP#JcGBIlM+nO5L`)|y&!PKJZK&^kC`K8J-L{qNe9W2FOb#bPO_eq$iw7EM%T~*x|u#iAEV!+&(R@zijL7qOu3s8n0ls>In117K47|;KIRVd6Enpu zwOXvD)(zHb>j7(<^<8U+^;7Fb>rLw&>pko5R-MggBWzFDme?rUCR>GVpY6EqtnFLd YsO_@-hJC_5zmO~}EPSr}{%joo3x{h2yZ`_I