From: Enrico Horn Subject: [PATCH resend] x11drv: handle missing thread data in X11DRV_get_ic Message-Id: <20181012195709.3709-1-farmboy0+winehq@googlemail.com> Date: Fri, 12 Oct 2018 21:57:09 +0200 Hi, This patch fixes a crash in x11drv when loading IME. This happens in Final Fantasy XI when using Ashita or Windower 3rd party applications. There has been no bug reported I just fixed the bug for myself. Here is the crash record: Unhandled exception: page fault on write access to 0x00000014 in 32-bit code (0x7d85a94b). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:7d85a94b ESP:0836fd10 EBP:0836fd38 EFLAGS:00010212( R- -- I -A- - ) EAX:00000000 EBX:0015abe8 ECX:00010050 EDX:00000000 ESI:00000000 EDI:7d894000 Stack dump: 0x0836fd10: 001e60c8 00000158 0836fdb8 00010050 0x0836fd20: 00000000 7d894000 7d85a90b 7d894000 0x0836fd30: 001e60cc 001e60c8 0836fd58 7d86560b 0x0836fd40: 00010050 00000035 7d827a09 7d8655fa 0x0836fd50: 7d894000 001e60cc 0836fd98 7d83c0ef 0x0836fd60: 00010050 7d894000 0836fd98 7d83bfb0 Backtrace: =>0 0x7d85a94b X11DRV_get_ic+0x4b(hwnd=0x10050) [/mnt/work/Repositories/wine/dlls/winex11.drv/window.c:2040] in winex11 (0x0836fd38) 1 0x7d86560b X11DRV_ForceXIMReset+0x1a(hwnd=0x10050) [/mnt/work/Repositories/wine/dlls/winex11.drv/xim.c:255] in winex11 (0x0836fd58) 2 0x7d83c0ef NotifyIME+0x17e(hIMC=, dwAction=, dwIndex=, dwValue=) [/mnt/work/Repositories/wine/dlls/winex11.drv/ime.c:764] in winex11 (0x0836fd98) 3 0x7dc80793 ImmNotifyIME+0x62(hIMC=, dwAction=, dwIndex=, dwValue=) [/mnt/work/Repositories/wine/dlls/imm32/imm.c:2189] in imm32 (0x0836fde8) 0x7d85a94b X11DRV_get_ic+0x4b [/mnt/work/Repositories/wine/dlls/winex11.drv/window.c:2040] in winex11: movl %ecx,0x14(%eax) 2040 x11drv_thread_data()->last_xic_hwnd = hwnd; Signed-off-by: Enrico Horn --- dlls/winex11.drv/window.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 7a3b340e19a..7dce6816ad7 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -2034,6 +2034,11 @@ XIC X11DRV_get_ic( HWND hwnd ) XIM xim; XIC ret = 0; + if (!x11drv_thread_data()) + { + release_win_data( data ); + return NULL; + } if (data) { x11drv_thread_data()->last_xic_hwnd = hwnd; -- 2.19.1