From 9c8f6fa3aa47618ba7a13f5cc865dfe30c0ed600 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Mon, 20 Oct 2025 03:50:25 +0800 Subject: [PATCH] fix: UpdateClientClipboard may lost the last letter --- client/ScreenManager.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/client/ScreenManager.cpp b/client/ScreenManager.cpp index b904dc0..c4ac9a4 100644 --- a/client/ScreenManager.cpp +++ b/client/ScreenManager.cpp @@ -319,13 +319,18 @@ VOID CScreenManager::UpdateClientClipboard(char *szBuffer, ULONG ulLength) if (!::OpenClipboard(NULL)) return; ::EmptyClipboard(); - HGLOBAL hGlobal = GlobalAlloc(GMEM_DDESHARE, ulLength); + HGLOBAL hGlobal = GlobalAlloc(GMEM_DDESHARE, ulLength+1); if (hGlobal != NULL) { LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal); - if (szClipboardVirtualAddress == NULL) - return; + if (szClipboardVirtualAddress == NULL) + { + GlobalFree(hGlobal); + CloseClipboard(); + return; + } memcpy(szClipboardVirtualAddress, szBuffer, ulLength); + szClipboardVirtualAddress[ulLength] = '\0'; GlobalUnlock(hGlobal); if(NULL==SetClipboardData(CF_TEXT, hGlobal)) GlobalFree(hGlobal);