imm32: When updating a NULL HIMCC with NULL just return NULL. Handle the NULL HIMCC for the compstr when doing a ImmNotifyIME for a reset.
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 4f5f658..58d0e3e 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -240,6 +240,9 @@
TRACE("%s, %i\n",debugstr_wn(compstr,len),len);
+ if (old == NULL && compstr == NULL && len == 0)
+ return NULL;
+
if (old != NULL)
{
olddata = ImmLockIMCC(old);
@@ -373,6 +376,9 @@
TRACE("%s, %i\n",debugstr_wn(resultstr,len),len);
+ if (old == NULL && resultstr == NULL && len == 0)
+ return NULL;
+
if (old != NULL)
{
olddata = ImmLockIMCC(old);
@@ -1419,7 +1425,7 @@
pX11DRV_ForceXIMReset(root_context->IMC.hWnd);
{
HIMCC newCompStr;
- DWORD cplen;
+ DWORD cplen = 0;
LPWSTR cpstr;
LPCOMPOSITIONSTRING cs = NULL;
LPBYTE cdata = NULL;
@@ -1429,11 +1435,14 @@
ImmDestroyIMCC(root_context->IMC.hCompStr);
root_context->IMC.hCompStr = newCompStr;
- cdata = ImmLockIMCC(root_context->IMC.hCompStr);
- cs = (LPCOMPOSITIONSTRING)cdata;
- cplen = cs->dwCompStrLen;
- cpstr = (LPWSTR)&(cdata[cs->dwCompStrOffset]);
- ImmUnlockIMCC(root_context->IMC.hCompStr);
+ if (root_context->IMC.hCompStr)
+ {
+ cdata = ImmLockIMCC(root_context->IMC.hCompStr);
+ cs = (LPCOMPOSITIONSTRING)cdata;
+ cplen = cs->dwCompStrLen;
+ cpstr = (LPWSTR)&(cdata[cs->dwCompStrOffset]);
+ ImmUnlockIMCC(root_context->IMC.hCompStr);
+ }
if (cplen > 0)
{
WCHAR param = cpstr[0];