From 21a477e161589630ed94e5561a595c63155e0e8f Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 9 Nov 2011 15:06:49 +0100 Subject: [PATCH] imm32: Validate the window handle passed to ImmGetContext. --- dlls/imm32/imm.c | 8 +++++++- dlls/imm32/tests/imm32.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index a8392ff7474..decdcae812f 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -1360,9 +1360,15 @@ BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) */ HIMC WINAPI ImmGetContext(HWND hWnd) { - HIMC rc = NULL; + HIMC rc; TRACE("%p\n", hWnd); + + if (!IsWindow(hWnd)) + { + SetLastError(ERROR_INVALID_WINDOW_HANDLE); + return NULL; + } if (!IMM_GetThreadData()->defaultContext) IMM_GetThreadData()->defaultContext = ImmCreateContext(); diff --git a/dlls/imm32/tests/imm32.c b/dlls/imm32/tests/imm32.c index 39bedb23e25..eca4d5e6fe8 100644 --- a/dlls/imm32/tests/imm32.c +++ b/dlls/imm32/tests/imm32.c @@ -557,6 +557,22 @@ static void test_ImmIsUIMessage(void) } } +static void test_ImmGetContext(void) +{ + HIMC himc; + DWORD err; + + SetLastError(0xdeadbeef); + himc = ImmGetContext((HWND)0xffffffff); + err = GetLastError(); + ok(himc == NULL, "ImmGetContext succeeded\n"); + ok(err == ERROR_INVALID_WINDOW_HANDLE, "got %u\n", err); + + himc = ImmGetContext(hwnd); + ok(himc != NULL, "ImmGetContext failed\n"); + ok(ImmReleaseContext(hwnd, himc), "ImmReleaseContext failed\n"); +} + START_TEST(imm32) { if (init()) { @@ -567,6 +583,7 @@ START_TEST(imm32) { test_ImmAssociateContextEx(); test_ImmThreads(); test_ImmIsUIMessage(); + test_ImmGetContext(); } cleanup(); }