Revision: 9392 https://osdn.net/projects/ttssh2/scm/svn/commits/9392 Author: zmatsuo Date: 2021-09-01 00:56:21 +0900 (Wed, 01 Sep 2021) Log Message: ----------- GetI18nStrW() でL'\0'が含まれていても全体を返せるよう修正 - 文字列中に '\0' が含まれていた場合、そこより後ろの文字を返していなかった - ファイルを開くフィルタ文字列で使用 Modified Paths: -------------- trunk/teraterm/common/i18n.c -------------- next part -------------- Modified: trunk/teraterm/common/i18n.c =================================================================== --- trunk/teraterm/common/i18n.c 2021-08-29 15:24:11 UTC (rev 9391) +++ trunk/teraterm/common/i18n.c 2021-08-31 15:56:21 UTC (rev 9392) @@ -31,6 +31,7 @@ #include "codeconv.h" #include "compat_win.h" +#include <wchar.h> #include <assert.h> /** @@ -43,7 +44,15 @@ { wchar_t *str; size_t size = GetI18nStrWA(section, key, def, iniFile, &str); - wcsncpy_s(buf, buf_len, str, _TRUNCATE); + if (size <= (size_t)buf_len) { + // size\x82\xCD L'\0' \x82\xF0\x8A܂\xDE + wmemcpy(buf, str, size); + } + else { + wmemcpy(buf, str, buf_len - 1); + buf[buf_len - 1] = '\0'; + assert(("buffer too small",0)); + } free(str); return size; } @@ -64,10 +73,11 @@ char *strA = _WideCharToMultiByte(strW, size, CP_ACP, &lenA); if ((size_t)buf_len >= lenA) { memcpy(buf, strA, lenA); - } else { - // \x83o\x83b\x83t\x83@\x95s\x91\xAB - memcpy(buf, strA, buf_len); + } + else { + memcpy(buf, strA, buf_len - 1); buf[buf_len - 1] = '\0'; + assert(("buffer too small",0)); } free(defW); free(strA);