• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

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

FFFTPのソースコードです。


Commit MetaInfo

Revisão7677acb145ecb0ef18f09f561740f08841f36f62 (tree)
Hora2011-11-04 20:13:10
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Mensagem de Log

Fix bugs of character code conversion of filenames.
Enhance routines for canceling or aborting.

Mudança Sumário

Diff

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/filelist.c
+++ b/filelist.c
@@ -4830,11 +4830,12 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
48304830
48314831 if(strchr("dl", *Str) != NULL)
48324832 {
4833- if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||
4834- (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))
4835- {
4836- *(Fname + strlen(Fname) - 1) = NUL;
4837- }
4833+ // 0x5Cが含まれる文字列を扱えないバグ修正
4834+// if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||
4835+// (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))
4836+// {
4837+// *(Fname + strlen(Fname) - 1) = NUL;
4838+// }
48384839 Ret = NODE_DIR;
48394840 if(*Str == 'l')
48404841 *Link = YES;
@@ -4904,6 +4905,10 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
49044905 Ret = NODE_NONE;
49054906 else
49064907 ChangeFnameRemote2Local(Fname, FMAX_PATH);
4908+ // 0x5Cが含まれる文字列を扱えないバグ修正
4909+ if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0)
4910+ || (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))
4911+ *(Fname + strlen(Fname) - 1) = NUL;
49074912 }
49084913 return(Ret);
49094914 }
--- a/main.c
+++ b/main.c
@@ -2151,6 +2151,11 @@ static void ChangeDir(int Win, char *Path)
21512151 char Local[FMAX_PATH+1];
21522152 char Remote[FMAX_PATH+1];
21532153
2154+ // 同時接続対応
2155+ CancelFlg = NO;
2156+
2157+ // デッドロック対策
2158+ DisableUserOpe();
21542159 Sync = AskSyncMoveMode();
21552160 if(Sync == YES)
21562161 {
@@ -2182,6 +2187,8 @@ static void ChangeDir(int Win, char *Path)
21822187 GetRemoteDirForWnd(CACHE_NORMAL, &CancelFlg);
21832188 }
21842189 }
2190+ // デッドロック対策
2191+ EnableUserOpe();
21852192 return;
21862193 }
21872194
--- a/remote.c
+++ b/remote.c
@@ -239,9 +239,12 @@ static int DoPWD(char *Buf)
239239 if(strlen(Tmp) < FMAX_PATH)
240240 {
241241 strcpy(Buf, Tmp);
242- ReplaceAll(Buf, '\\', '/');
242+ // 0x5Cが含まれる文字列を扱えないバグ修正
243+// ReplaceAll(Buf, '\\', '/');
243244 ChangeSepaRemote2Local(Buf);
244245 ChangeFnameRemote2Local(Buf, FMAX_PATH);
246+ // 0x5Cが含まれる文字列を扱えないバグ修正
247+ ReplaceAll(Buf, '\\', '/');
245248 }
246249 else
247250 Sts = FTP_ERROR*100;
@@ -1324,13 +1327,21 @@ int ChangeFnameRemote2Local(char *Fname, int Max)
13241327 char *Buf;
13251328 char *Pos;
13261329 CODECONVINFO cInfo;
1330+ // バッファ上書きバグ対策
1331+ char *Buf2;
13271332
13281333 Sts = FFFTP_FAIL;
13291334 if((Buf = malloc(Max)) != NULL)
13301335 {
1336+ // バッファ上書きバグ対策
1337+ if((Buf2 = malloc(strlen(Fname) + 1)) != NULL)
1338+ {
13311339 InitCodeConvInfo(&cInfo);
13321340 cInfo.KanaCnv = NO; //AskHostNameKana();
1333- cInfo.Str = Fname;
1341+ // バッファ上書きバグ対策
1342+// cInfo.Str = Fname;
1343+ strcpy(Buf2, Fname);
1344+ cInfo.Str = Buf2;
13341345 cInfo.StrLen = strlen(Fname);
13351346 cInfo.Buf = Buf;
13361347 cInfo.BufSize = Max - 1;
@@ -1432,8 +1443,13 @@ int ChangeFnameRemote2Local(char *Fname, int Max)
14321443 // strcpy(Pos, Buf);
14331444 // break;
14341445 }
1435- free(Buf);
1446+ // バッファ上書きバグ対策
1447+ free(Buf2);
14361448 Sts = FFFTP_SUCCESS;
1449+ }
1450+ free(Buf);
1451+ // バッファ上書きバグ対策
1452+// Sts = FFFTP_SUCCESS;
14371453 }
14381454 return(Sts);
14391455 }
@@ -1456,13 +1472,21 @@ int ChangeFnameLocal2Remote(char *Fname, int Max)
14561472 char *Buf;
14571473 char *Pos;
14581474 CODECONVINFO cInfo;
1475+ // バッファ上書きバグ対策
1476+ char *Buf2;
14591477
14601478 Sts = FFFTP_FAIL;
14611479 if((Buf = malloc(Max)) != NULL)
14621480 {
1481+ // バッファ上書きバグ対策
1482+ if((Buf2 = malloc(strlen(Fname) + 1)) != NULL)
1483+ {
14631484 InitCodeConvInfo(&cInfo);
14641485 cInfo.KanaCnv = AskHostNameKana();
1465- cInfo.Str = Fname;
1486+ // バッファ上書きバグ対策
1487+// cInfo.Str = Fname;
1488+ strcpy(Buf2, Fname);
1489+ cInfo.Str = Buf2;
14661490 cInfo.StrLen = strlen(Fname);
14671491 cInfo.Buf = Buf;
14681492 cInfo.BufSize = Max - 1;
@@ -1587,8 +1611,13 @@ int ChangeFnameLocal2Remote(char *Fname, int Max)
15871611 // strcpy(Pos, Buf);
15881612 // break;
15891613 }
1590- free(Buf);
1614+ // バッファ上書きバグ対策
1615+ free(Buf2);
15911616 Sts = FFFTP_SUCCESS;
1617+ }
1618+ free(Buf);
1619+ // バッファ上書きバグ対策
1620+// Sts = FFFTP_SUCCESS;
15921621 }
15931622 return(Sts);
15941623 }