[Ttssh2-commit] [8796] クリップボードからペースト時に本当にテキストかどうか確認

アーカイブの一覧に戻る
scmno****@osdn***** scmno****@osdn*****
2020年 6月 15日 (月) 11:06:35 JST


Revision: 8796
          https://osdn.net/projects/ttssh2/scm/svn/commits/8796
Author:   zmatsuo
Date:     2020-06-15 11:06:34 +0900 (Mon, 15 Jun 2020)
Log Message:
-----------
クリップボードからペースト時に本当にテキストかどうか確認

- IsTextW()追加

Modified Paths:
--------------
    trunk/teraterm/common/ttlib.h
    trunk/teraterm/common/ttlib_static_cpp.cpp
    trunk/teraterm/teraterm/clipboar.c

-------------- next part --------------
Modified: trunk/teraterm/common/ttlib.h
===================================================================
--- trunk/teraterm/common/ttlib.h	2020-06-13 11:25:05 UTC (rev 8795)
+++ trunk/teraterm/common/ttlib.h	2020-06-15 02:06:34 UTC (rev 8796)
@@ -162,6 +162,7 @@
 char *GetClipboardTextA(HWND hWnd, BOOL empty);
 BOOL CBSetTextW(HWND hWnd, const wchar_t *str_w, size_t str_len);
 void TTInsertMenuItemA(HMENU hMenu, UINT targetItemID, UINT flags, UINT newItemID, const char *text, BOOL before);
+BOOL IsTextW(const wchar_t *str, size_t len);
 
 #ifdef __cplusplus
 }

Modified: trunk/teraterm/common/ttlib_static_cpp.cpp
===================================================================
--- trunk/teraterm/common/ttlib_static_cpp.cpp	2020-06-13 11:25:05 UTC (rev 8795)
+++ trunk/teraterm/common/ttlib_static_cpp.cpp	2020-06-15 02:06:34 UTC (rev 8796)
@@ -104,6 +104,44 @@
 }
 
 /**
+ *	str\x82\xAA\x83e\x83L\x83X\x83g\x82\xA9\x82ǂ\xA4\x82\xA9\x83`\x83F\x83b\x83N
+ *
+ *	@param[in]	str		\x83e\x83X\x83g\x82\xB7\x82镶\x8E\x9A
+ *	@param[in]	len		\x83e\x83X\x83g\x82\xB7\x82\xE9\x83e\x83L\x83X\x83g\x92\xB7(L'\0'\x82͊܂܂Ȃ\xA2)
+ *						0\x82̂Ƃ\xABL'\0'\x82̑O\x82܂Ńe\x83X\x83g\x82\xB7\x82\xE9
+ *	@retval		TRUE	\x83e\x83L\x83X\x83g\x82Ǝv\x82\xED\x82\xEA\x82\xE9(\x92\xB7\x82\xB30\x82̂Ƃ\xAB\x82\xE0\x8A܂\xDE)
+ *				FALSE	\x83e\x83L\x83X\x83g\x82ł͂Ȃ\xA2
+ *
+ *	\x8C\x9F\x8D\xB8\x82\xB7\x82\xE9\x83f\x81[\x83^\x93\xE0\x82\xC90x20\x96\xA2\x96\x9E\x82̃e\x83L\x83X\x83g\x82ɂ͏o\x82Ă\xB1\x82Ȃ\xA2\x95\xB6\x8E\x9A\x82\xAA\x82\xA0\x82\xEA\x82\xCE
+ *	\x83o\x83C\x83i\x83\x8A\x82Ɣ\xBB\x92f
+ *	IsTextUnicode() \x82̂ق\xA4\x82\xAA\x97ǂ\xA2\x82\xA9\x81H
+ */
+BOOL IsTextW(const wchar_t *str, size_t len)
+{
+	if (len == 0) {
+		len = wcslen(str);
+		if (len == 0) {
+			return TRUE;
+		}
+	}
+
+	BOOL result = TRUE;
+	while(len-- > 0) {
+		wchar_t c = *str++;
+		if (c >= 0x20) {
+			continue;
+		}
+		if ((7 <= c && c <= 0x0d) || c == 0x1b) {
+			/* \a, \b, \t, \n, \v, \f, \r, \e */
+			continue;
+		}
+		result = FALSE;
+		break;
+	}
+	return result;
+}
+
+/**
  *	\x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82\xA9\x82\xE7wchar_t\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8E擾\x82\xB7\x82\xE9
  *	\x95\xB6\x8E\x9A\x97񒷂\xAA\x95K\x97v\x82ȂƂ\xAB\x82\xCDwcslen()\x82\xB7\x82邱\x82\xC6
  *	@param	hWnd

Modified: trunk/teraterm/teraterm/clipboar.c
===================================================================
--- trunk/teraterm/teraterm/clipboar.c	2020-06-13 11:25:05 UTC (rev 8795)
+++ trunk/teraterm/teraterm/clipboar.c	2020-06-15 02:06:34 UTC (rev 8796)
@@ -345,7 +345,7 @@
 	CBEchoOnly = FALSE;
 
 	str_w = GetClipboardTextW(HWin, FALSE);
-	if (str_w == NULL) {
+	if (str_w == NULL || !IsTextW(str_w, 0)) {
 		// \x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82\xA9\x82當\x8E\x9A\x97\xF1\x82\xF0\x8E擾\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
 		CBEndPaste();
 		return;
@@ -419,7 +419,7 @@
 	CBEchoOnly = FALSE;
 
 	str_w = GetClipboardTextW(HWin, FALSE);
-	if (str_w == NULL) {
+	if (str_w == NULL || !IsTextW(str_w, 0)) {
 		// \x83N\x83\x8A\x83b\x83v\x83{\x81[\x83h\x82\xA9\x82當\x8E\x9A\x97\xF1\x82\xF0\x8E擾\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD
 		goto error;
 	}


Ttssh2-commit メーリングリストの案内
アーカイブの一覧に戻る