[ttssh2-commit] [9392] GetI18nStrW() でL'\0'が含まれていても全体を返せるよう修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 9月 1日 (水) 00:56:21 JST


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);


ttssh2-commit メーリングリストの案内
Back to archive index