imm32: Validate the window handle passed to ImmGetContext.

This commit is contained in:
Hans Leidekker 2011-11-09 15:06:49 +01:00 committed by Alexandre Julliard
parent 5d64254986
commit 21a477e161
2 changed files with 24 additions and 1 deletions

View file

@ -1360,9 +1360,15 @@ BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)
*/ */
HIMC WINAPI ImmGetContext(HWND hWnd) HIMC WINAPI ImmGetContext(HWND hWnd)
{ {
HIMC rc = NULL; HIMC rc;
TRACE("%p\n", hWnd); TRACE("%p\n", hWnd);
if (!IsWindow(hWnd))
{
SetLastError(ERROR_INVALID_WINDOW_HANDLE);
return NULL;
}
if (!IMM_GetThreadData()->defaultContext) if (!IMM_GetThreadData()->defaultContext)
IMM_GetThreadData()->defaultContext = ImmCreateContext(); IMM_GetThreadData()->defaultContext = ImmCreateContext();

View file

@ -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) { START_TEST(imm32) {
if (init()) if (init())
{ {
@ -567,6 +583,7 @@ START_TEST(imm32) {
test_ImmAssociateContextEx(); test_ImmAssociateContextEx();
test_ImmThreads(); test_ImmThreads();
test_ImmIsUIMessage(); test_ImmIsUIMessage();
test_ImmGetContext();
} }
cleanup(); cleanup();
} }