From: Akihiro Sagawa Subject: [PATCH] imm32: Correctly return the size of the required output buffer. Message-Id: <20190317232908.9636.375B48EC@gmail.com> Date: Sun, 17 Mar 2019 23:29:29 +0900 This fixes a regression introduced by fd7cda93a33c9f65a6c1d1d530738c9fe4b9edf4. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46851 Signed-off-by: Akihiro Sagawa --- dlls/imm32/imm.c | 9 +++++++-- dlls/imm32/tests/imm32.c | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index b462141..b2ac662 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -1224,8 +1224,13 @@ static INT CopyCompStringIMEtoClient(const InputContextData *data, const void *s } else { - ret = min(src_len * char_size, dst_len); - memcpy(dst, src, ret); + if (dst_len) + { + ret = min(src_len * char_size, dst_len); + memcpy(dst, src, ret); + } + else + ret = src_len * char_size; } return ret; diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index d15fa9c..040a43f 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -473,6 +473,18 @@ static void test_ImmGetCompositionString(void) len = ImmGetCompositionStringW(imc, GCS_COMPSTR, wstring, wlen - 1); ok(len == wlen - 1, "Unexpected length %d.\n", len); ok(!memcmp(wstring, string, wlen - 1), "Unexpected buffer contents.\n"); + + /* Get the size of the required output buffer. */ + memset(wstring, 0x1a, sizeof(wstring)); + memset(cstring, 0x1a, sizeof(cstring)); + + len = ImmGetCompositionStringA(imc, GCS_COMPSTR, cstring, 0); + ok(len == alen, "Unexpected length %d.\n", len); + ok(cstring[0] == 0x1a, "Unexpected buffer contents %s.\n", cstring); + + len = ImmGetCompositionStringW(imc, GCS_COMPSTR, wstring, 0); + ok(len == wlen, "Unexpected length %d.\n", len); + ok(wstring[0] == 0x1a1a, "Unexpected buffer contents.\n"); } else win_skip("Composition string isn't available\n");