• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

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

FFFTPのソースコードです。


Commit MetaInfo

Revisionaa3eb353c0bf24065b8a44e7238cdcf72c814d6f (tree)
Zeit2012-07-01 22:07:27
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Fix bugs of corruption during conversion from Shift_JIS to UTF-8.

Ändern Zusammenfassung

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/codecnv.c
+++ b/codecnv.c
@@ -1517,20 +1517,18 @@ int ConvUTF8NtoSJIS_TruncateToDelimiter(char* pUTF8, int UTF8Length, int* pNewUT
15171517 {
15181518 UTF8Length--;
15191519 UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pUTF8, UTF8Length, pUTF16, UTF16Length);
1520- SJISLength = NewSJISLength;
15211520 NewSJISLength = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);
15221521 }
15231522 free(pUTF16);
15241523 // UTF-16 LE変換した時に文字数が増減する位置がUTF-8の区切り
1525- NewUTF16Length = UTF16Length;
1526- while(UTF8Length > 0 && NewUTF16Length >= UTF16Length)
1527- {
1528- UTF8Length--;
1529- UTF16Length = NewUTF16Length;
1530- NewUTF16Length = MultiByteToWideChar(CP_UTF8, 0, pUTF8, UTF8Length, NULL, 0);
1531- }
15321524 if(pNewUTF8Length)
15331525 {
1526+ NewUTF16Length = UTF16Length;
1527+ while(UTF8Length > 0 && NewUTF16Length >= UTF16Length)
1528+ {
1529+ UTF8Length--;
1530+ NewUTF16Length = MultiByteToWideChar(CP_UTF8, 0, pUTF8, UTF8Length, NULL, 0);
1531+ }
15341532 if(UTF16Length > 0)
15351533 UTF8Length++;
15361534 *pNewUTF8Length = UTF8Length;
@@ -1582,7 +1580,6 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo)
15821580 SrcLength = SrcLength / 2;
15831581 }
15841582 }
1585- // UTF-8の場合、不完全な文字は常に変換されない
15861583 UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, NULL, 0);
15871584
15881585 // サイズ0 or バッファサイズより大きい場合は
--- a/config.h
+++ b/config.h
@@ -3,12 +3,6 @@
33 #define HAVE_OPENVMS
44
55 // 全体に影響する設定はここに記述する予定
6-// 内部をUTF-8として扱いマルチバイト文字ワイド文字APIラッパーを使用する
7-#include "mbswrapper.h"
8-// OpenSSL用ソケットラッパーを使用する
9-#include "socketwrapper.h"
10-// プロセスをDLL Injectionから保護する
11-#include "protectprocess.h"
126 // 使用するCPUを1個に限定する(マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策)
137 //#define DISABLE_MULTI_CPUS
148 // ファイル転送用のネットワークバッファを無効にする(通信中止後にリモートのディレクトリが表示されないバグ対策)
@@ -27,3 +21,10 @@
2721 /* HP NonStop Server 用のコードを有効にする */
2822 #define HAVE_TANDEM
2923
24+// 内部をUTF-8として扱いマルチバイト文字ワイド文字APIラッパーを使用する
25+#include "mbswrapper.h"
26+// OpenSSL用ソケットラッパーを使用する
27+#include "socketwrapper.h"
28+// プロセスをDLL Injectionから保護する
29+#include "protectprocess.h"
30+
--- a/mbswrapper.c
+++ b/mbswrapper.c
@@ -715,6 +715,7 @@ int MultiByteToWideCharAlternative(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiB
715715 LPCSTR pMultiLimit;
716716 LPWSTR pWideLimit;
717717 DWORD Code;
718+ int TempCount;
718719 WCHAR Temp[8];
719720 if(CodePage != CP_UTF8 || dwFlags != 0)
720721 return MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar);
@@ -731,8 +732,9 @@ int MultiByteToWideCharAlternative(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiB
731732 continue;
732733 if(lpWideCharStr)
733734 {
734- WideCount += PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);
735- if(lpWideCharStr >= pWideLimit)
735+ TempCount = PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);
736+ WideCount += TempCount;
737+ if(TempCount == 0 && lpWideCharStr >= pWideLimit)
736738 {
737739 WideCount = 0;
738740 break;
@@ -752,6 +754,7 @@ int WideCharToMultiByteAlternative(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideC
752754 LPCWSTR pWideLimit;
753755 LPSTR pMultiLimit;
754756 DWORD Code;
757+ int TempCount;
755758 CHAR Temp[8];
756759 if(CodePage != CP_UTF8 || dwFlags != 0)
757760 return WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar);
@@ -768,8 +771,9 @@ int WideCharToMultiByteAlternative(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideC
768771 continue;
769772 if(lpMultiByteStr)
770773 {
771- MultiCount += PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);
772- if(lpMultiByteStr >= pMultiLimit)
774+ TempCount = PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);
775+ MultiCount += TempCount;
776+ if(TempCount == 0 && lpMultiByteStr >= pMultiLimit)
773777 {
774778 MultiCount = 0;
775779 break;