• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Loweynet


コミットメタ情報

リビジョンf1806f8e85068789f78c822f2e1088a12bc09919 (tree)
日時2011-10-17 20:52:51
作者s_kawamoto <s_kawamoto@user...>
コミッターs_kawamoto

ログメッセージ

Fix bugs of arbitrary code execution.

変更サマリ

差分

Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
--- a/main.c
+++ b/main.c
@@ -2419,6 +2419,8 @@ void ExecViewer(char *Fname, int App)
24192419 char AssocProg[FMAX_PATH+1];
24202420 char ComLine[FMAX_PATH*2+3+1];
24212421 char CurDir[FMAX_PATH+1];
2422+ // 任意のコードが実行されるバグ修正
2423+ char SysDir[FMAX_PATH+1];
24222424
24232425 /* FindExecutable()は関連付けられたプログラムのパス名にスペースが */
24242426 /* 含まれている時、間違ったパス名を返す事がある。 */
@@ -2446,10 +2448,26 @@ void ExecViewer(char *Fname, int App)
24462448 memset(&Startup, NUL, sizeof(STARTUPINFO));
24472449 Startup.cb = sizeof(STARTUPINFO);
24482450 Startup.wShowWindow = SW_SHOW;
2449- if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)
2451+ // 任意のコードが実行されるバグ修正
2452+// if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)
2453+// {
2454+// SetTaskMsg(MSGJPN182, GetLastError());
2455+// SetTaskMsg(">>%s", ComLine);
2456+// }
2457+ if(GetCurrentDirectory(FMAX_PATH, CurDir) > 0)
24502458 {
2451- SetTaskMsg(MSGJPN182, GetLastError());
2452- SetTaskMsg(">>%s", ComLine);
2459+ if(GetSystemDirectory(SysDir, FMAX_PATH) > 0)
2460+ {
2461+ if(SetCurrentDirectory(SysDir))
2462+ {
2463+ if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)
2464+ {
2465+ SetTaskMsg(MSGJPN182, GetLastError());
2466+ SetTaskMsg(">>%s", ComLine);
2467+ }
2468+ SetCurrentDirectory(CurDir);
2469+ }
2470+ }
24532471 }
24542472 }
24552473 return;
@@ -2474,6 +2492,8 @@ void ExecViewer2(char *Fname1, char *Fname2, int App)
24742492 char AssocProg[FMAX_PATH+1];
24752493 char ComLine[FMAX_PATH*2+3+1];
24762494 char CurDir[FMAX_PATH+1];
2495+ // 任意のコードが実行されるバグ修正
2496+ char SysDir[FMAX_PATH+1];
24772497
24782498 /* FindExecutable()は関連付けられたプログラムのパス名にスペースが */
24792499 /* 含まれている時、間違ったパス名を返す事がある。 */
@@ -2493,10 +2513,26 @@ void ExecViewer2(char *Fname1, char *Fname2, int App)
24932513 memset(&Startup, NUL, sizeof(STARTUPINFO));
24942514 Startup.cb = sizeof(STARTUPINFO);
24952515 Startup.wShowWindow = SW_SHOW;
2496- if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)
2516+ // 任意のコードが実行されるバグ修正
2517+// if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)
2518+// {
2519+// SetTaskMsg(MSGJPN182, GetLastError());
2520+// SetTaskMsg(">>%s", ComLine);
2521+// }
2522+ if(GetCurrentDirectory(FMAX_PATH, CurDir) > 0)
24972523 {
2498- SetTaskMsg(MSGJPN182, GetLastError());
2499- SetTaskMsg(">>%s", ComLine);
2524+ if(GetSystemDirectory(SysDir, FMAX_PATH) > 0)
2525+ {
2526+ if(SetCurrentDirectory(SysDir))
2527+ {
2528+ if(CreateProcess(NULL, ComLine, NULL, NULL, FALSE, 0, NULL, NULL, &Startup, &Info) == FALSE)
2529+ {
2530+ SetTaskMsg(MSGJPN182, GetLastError());
2531+ SetTaskMsg(">>%s", ComLine);
2532+ }
2533+ SetCurrentDirectory(CurDir);
2534+ }
2535+ }
25002536 }
25012537
25022538 return;