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