From be6c108189eb689ecaacebd400cdbe3e57328ac0 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 3 Dec 2024 11:39:49 +0100 Subject: [PATCH] [winpr,clipboard] follow up to #10901 CF_UNICODETEXT is UCS-2 encoded, so determine string length with _wscnlen, the other string types are in local encoding which requires strnlen --- winpr/libwinpr/clipboard/clipboard.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/winpr/libwinpr/clipboard/clipboard.c b/winpr/libwinpr/clipboard/clipboard.c index b1087873d..564fca421 100644 --- a/winpr/libwinpr/clipboard/clipboard.c +++ b/winpr/libwinpr/clipboard/clipboard.c @@ -492,7 +492,7 @@ BOOL ClipboardSetData(wClipboard* clipboard, UINT32 formatId, const void* data, free(clipboard->data); - clipboard->data = calloc(size + 1, sizeof(char)); + clipboard->data = calloc(size + sizeof(WCHAR), sizeof(char)); if (!clipboard->data) return FALSE; @@ -506,9 +506,11 @@ BOOL ClipboardSetData(wClipboard* clipboard, UINT32 formatId, const void* data, { case CF_TEXT: case CF_OEMTEXT: - case CF_UNICODETEXT: clipboard->size = strnlen(clipboard->data, size) + 1; break; + case CF_UNICODETEXT: + clipboard->size = (_wcsnlen(clipboard->data, size / sizeof(WCHAR)) + 1) * sizeof(WCHAR); + break; default: clipboard->size = size; break;