[Bug 45693] SX VirtualLink installer crashes on startup (window activation /focus change: palette messages must only be sent if the device supports color palettes)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Aug 25 07:13:40 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=45693

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |Installer
            Summary|VirtualLink Software-Setup  |SX VirtualLink installer
                   |fails immediately           |crashes on startup (window
                   |                            |activation/focus change:
                   |                            |palette messages must only
                   |                            |be sent if the device
                   |                            |supports color palettes)
          Component|-unknown                    |user32
                 CC|                            |focht at gmx.net

--- Comment #2 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

confirming.

--- snip ---
$ pwd
/home/focht/Downloads/s-40a720/Utility/Virtuallink/Files

$ winedbg ./Setup64.exe
...
Unhandled exception: page fault on read access to 0x00000008 in 64-bit code
(0x0000000140013218).
Register dump:
 rip:0000000140013218 rsp:000000000023e950 rbp:000000000023e9e0 eflags:00010246
(  R- --  I  Z- -P- )
 rax:00000000001f0059 rbx:0000000000000000 rcx:00000000000100a8
rdx:0000000000000000
 rsi:0000000000000000 rdi:000000000002005a  r8:0000000000000000 
r9:0000000000000000 r10:0000000000075d00
 r11:0000000000001a85 r12:0000000000000000 r13:0000000140055360
r14:0000000000000000 r15:0000000000000000
Stack dump:
0x000000000023e950:  000000000002005a 0000000000000000
0x000000000023e960:  0000000000000000 0000000000000000
0x000000000023e970:  0000000000000000 0000000000000000
0x000000000023e980:  0000000000000000 00007f6dc12d8604
0x000000000023e990:  000000000002005a 0000000000000000
0x000000000023e9a0:  0000000000000000 0000000000000000
0x000000000023e9b0:  000000000000030f 0000000000000000
0x000000000023e9c0:  0000000000000000 0000030fc12d89ca
0x000000000023e9d0:  000000000002005a 0000000140012f00
0x000000000023e9e0:  000000000023ea70 00007f6dc12d89f7
0x000000000023e9f0:  0000000140012f00 000000000023eab8
0x000000000023ea00:  0000000000000000 0000000000000000
Backtrace:
=>0 0x0000000140013218 in setup64 (+0x13218) (0x000000000023e9e0)
  1 0x00007f6dc12d8604 WINPROC_wrapper+0x39()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:216] in user32
(0x000000000023e9e0)
  2 0x00007f6dc12d89f7 call_dialog_proc+0x138()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:268] in user32
(0x000000000023ea70)
  3 0x00007f6dc12dbdbe WINPROC_CallDlgProcW+0x133()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:1082] in user32
(0x000000000023ead0)
  4 0x00007f6dc121b064 DefDlgProcW+0xff()
[/home/focht/projects/wine/mainline-src/dlls/user32/defdlg.c:430] in user32
(0x000000000023ebd0)
  5 0x00007f6dc12d8604 WINPROC_wrapper+0x39()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:216] in user32
(0x000000000023ec30)
  6 0x00007f6dc12d87f1 call_window_proc+0x138()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:246] in user32
(0x000000000023ecb0)
  7 0x00007f6dc12db359 WINPROC_call_window+0x1db()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:908] in user32
(0x000000000023ed20)
  8 0x00007f6dc12772b7 call_window_proc+0xeb()
[/home/focht/projects/wine/mainline-src/dlls/user32/message.c:2223] in user32
(0x000000000023edd0)
  9 0x00007f6dc127aa8e send_message+0x182()
[/home/focht/projects/wine/mainline-src/dlls/user32/message.c:3264] in user32
(0x000000000023ee30)
  10 0x00007f6dc127b3d0 SendMessageW+0xd3()
[/home/focht/projects/wine/mainline-src/dlls/user32/message.c:3464] in user32
(0x000000000023ef40)
  11 0x00007f6dc123da56 set_active_window+0x27f()
[/home/focht/projects/wine/mainline-src/dlls/user32/focus.c:116] in user32
(0x000000000023f0a0)
  12 0x00007f6dc123e4fe SetFocus+0x28d()
[/home/focht/projects/wine/mainline-src/dlls/user32/focus.c:299] in user32
(0x000000000023f1b0)
  13 0x00007f6dc1222bda DIALOG_CreateIndirect+0x10a7()
[/home/focht/projects/wine/mainline-src/dlls/user32/dialog.c:692] in user32
(0x000000000023f560)
  14 0x00007f6dc1222e9a CreateDialogIndirectParamAorW+0x9d()
[/home/focht/projects/wine/mainline-src/dlls/user32/dialog.c:746] in user32
(0x000000000023f630)
  15 0x00007f6dc1222f8b CreateDialogIndirectParamW+0x51()
[/home/focht/projects/wine/mainline-src/dlls/user32/dialog.c:764] in user32
(0x000000000023f670)
  16 0x00007f6dc1222dfa CreateDialogParamW+0xa7()
[/home/focht/projects/wine/mainline-src/dlls/user32/dialog.c:735] in user32
(0x000000000023f6c0)
  17 0x0000000140032f59 in setup64 (+0x32f58) (0x000000000001004e)
  18 0x000000014003319e in setup64 (+0x3319d) (0x000000000023f7b0)
  19 0x00007f6dc12d8604 WINPROC_wrapper+0x39()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:216] in user32
(0x000000000023f7b0)
  20 0x00007f6dc12d87f1 call_window_proc+0x138()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:246] in user32
(0x000000000023f830)
  21 0x00007f6dc12db46f WINPROC_call_window+0x2f1()
[/home/focht/projects/wine/mainline-src/dlls/user32/winproc.c:921] in user32
(0x000000000023f8a0)
  22 0x00007f6dc127d9bc DispatchMessageW+0x22e()
[/home/focht/projects/wine/mainline-src/dlls/user32/message.c:4030] in user32
(0x000000000023fab0)
  23 0x0000000140034b61 in setup64 (+0x34b60) (0x0000000000000000)
  24 0x00000001400368bb in setup64 (+0x368ba) (0x000000000023fdc0)
  25 0x000000007b4d723d call_process_entry+0x20()
[/home/focht/projects/wine/mainline-src/dlls/kernel32/process.c:1062] in
kernel32 (0x000000000023fdc0)
  26 0x000000007b4d7487 start_process+0x243()
[/home/focht/projects/wine/mainline-src/dlls/kernel32/process.c:1094] in
kernel32 (0x000000000023ffd0)
0x0000000140013218: movq    0x0000000000000008(%rdx),%rdx
--- snip ---

--- snip ---
$ WINEDEBUG=+seh,+relay,+win,+msg wine ./Setup64.exe >>log.txt 2>&1
...
0032:Call
user32.CreateDialogParamW(140000000,00000065,000100d4,140012f00,00000000)
ret=140032f59 
...
0032:trace:win:WIN_CreateWindowEx L"DLG_MAIN" #8002 ex=00010001 style=82c800c4
0,0 354x197 parent=0x100d4 menu=(nil) inst=0x140000000 params=(nil)
0032:trace:win:dump_window_styles style: WS_POPUP WS_CLIPCHILDREN WS_CAPTION
WS_SYSMENU 000000c4
0032:trace:win:dump_window_styles exstyle: WS_EX_DLGMODALFRAME
WS_EX_CONTROLPARENT 
...
0032:trace:win:WIN_CreateWindowEx hwnd 0x200e0 cs 0,0 354x197 (0,0)-(354,197)
0032:Call window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_NCCREATE,wp=00000000,lp=0023ef90)
0032:trace:win:WIN_SetWindowLong 0x200e0 0 0 W
0032:Call winex11.drv.SetWindowText(000200e0,0009b8f0 L"DLG_MAIN")
ret=7f1b9e9775c1
0032:Ret  winex11.drv.SetWindowText() retval=00000001 ret=7f1b9e9775c1
0032:Ret  window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_NCCREATE,wp=00000000,lp=0023ef90) retval=00000001 
...
0032:Call window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_CREATE,wp=00000000,lp=0023ef90)
0032:trace:win:WIN_SetWindowLong 0x200e0 0 0 W
0032:Ret  window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_CREATE,wp=00000000,lp=0023ef90) retval=00000000
0032:Call winex11.drv.CreateWindow(000200e0) ret=7f1b9ea1d576
0032:Ret  winex11.drv.CreateWindow() retval=00000001 ret=7f1b9ea1d576
0032:Call window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_SIZE,wp=00000000,lp=00ac015c)
0032:trace:win:WIN_SetWindowLong 0x200e0 0 0 W
0032:Ret  window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_SIZE,wp=00000000,lp=00ac015c) retval=00000000
0032:Call window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_MOVE,wp=00000000,lp=00160003)
0032:trace:win:WIN_SetWindowLong 0x200e0 0 0 W
0032:Ret  window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_MOVE,wp=00000000,lp=00160003) retval=00000000
0032:trace:msg:PostMessageW hwnd 0x10020 msg 210 (WM_PARENTNOTIFY) wp 1 lp
200e0 
...
0032:Ret  window proc 0x7f1b9ed7260b
(hwnd=0x100ee,msg=WM_GETDLGCODE,wp=00000000,lp=00000000) retval=00002020
0032:Call window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_INITDIALOG,wp=000100ea,lp=00000000)
0032:trace:win:WIN_SetWindowLong 0x200e0 0 0 W
0032:Call dialog proc 0x140012f00
(hwnd=0x200e0,msg=WM_INITDIALOG,wp=000100ea,lp=00000000)
0032:Call user32.PostMessageW(000200e0,00000464,00000000,00000000)
ret=140012f5e
0032:trace:msg:PostMessageW hwnd 0x200e0 msg 464 (WM_USER+100) wp 0 lp 0
0032:Ret  user32.PostMessageW() retval=00000001 ret=140012f5e
0032:Ret  dialog proc 0x140012f00
(hwnd=0x200e0,msg=WM_INITDIALOG,wp=000100ea,lp=00000000) retval=00000001
result=00000000
0032:Ret  window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_INITDIALOG,wp=000100ea,lp=00000000) retval=00000001
0032:Call window proc 0x7f1b9ed7260b
(hwnd=0x100ea,msg=WM_GETDLGCODE,wp=00000000,lp=00000000) 
...
0032:trace:win:SetFocus 0x100ea prev (nil)
0032:Call window proc 0x140033000
(hwnd=0x100d4,msg=WM_NCACTIVATE,wp=00000000,lp=000200e0)
0032:Call user32.DefWindowProcW(000100d4,00000086,00000000,000200e0)
ret=7f1b9ea33824
0032:trace:msg:PostMessageW hwnd 0x10020 msg 210 (WM_PARENTNOTIFY) wp 86 lp
100d4
0032:Ret  user32.DefWindowProcW() retval=00000001 ret=7f1b9ea33824
0032:Ret  window proc 0x140033000
(hwnd=0x100d4,msg=WM_NCACTIVATE,wp=00000000,lp=000200e0) retval=00000001
0032:Call window proc 0x140033000
(hwnd=0x100d4,msg=WM_ACTIVATE,wp=00010000,lp=000200e0)
0032:Call user32.DefWindowProcW(000100d4,00000006,00010000,000200e0)
ret=7f1b9ea33824
0032:Ret  user32.DefWindowProcW() retval=00000000 ret=7f1b9ea33824
0032:Ret  window proc 0x140033000
(hwnd=0x100d4,msg=WM_ACTIVATE,wp=00010000,lp=000200e0) retval=00000000
0032:Call window proc 0x7f1b9e976964
(hwnd=0x200e0,msg=WM_QUERYNEWPALETTE,wp=00000000,lp=00000000)
0032:trace:win:WIN_SetWindowLong 0x200e0 0 0 W
0032:Call dialog proc 0x140012f00
(hwnd=0x200e0,msg=WM_QUERYNEWPALETTE,wp=00000000,lp=00000000)
0032:Call user32.GetDC(000200e0) ret=14001320e
0032:trace:win:GetDCEx hwnd 0x200e0, hrgnClip (nil), flags 00010000
...
0032:trace:win:GetDCEx (0x200e0,(nil),0x10018): returning 0x1f0059 (updated)
0032:Ret  user32.GetDC() retval=001f0059 ret=14001320e
0032:trace:seh:NtRaiseException code=c0000005 flags=0 addr=0x140013218
ip=140013218 tid=0032
0032:trace:seh:NtRaiseException  info[0]=0000000000000000
0032:trace:seh:NtRaiseException  info[1]=0000000000000008
0032:trace:seh:NtRaiseException  rax=00000000001f0059 rbx=0000000000000000
rcx=000000007bdc2427 rdx=0000000000000000
0032:trace:seh:NtRaiseException  rsi=0000000000000000 rdi=00000000000200e0
rbp=000000000023e900 rsp=000000000023e870
0032:trace:seh:NtRaiseException   r8=0000000000000000  r9=000000000023dfd0
r10=0000000000000000 r11=0000000000000246
0032:trace:seh:NtRaiseException  r12=0000000000000000 r13=0000000140055360
r14=0000000000000000 r15=0000000000000000 
--- snip ---

After creation of child controls the control focus is set which causes palette
messages to be sent.

SetFocus -> set_active_window

https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/user32/focus.c#l77

--- snip ---
  77 static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL
focus )
  78 {
  79     HWND previous = GetActiveWindow();
  80     BOOL ret;
  81     DWORD old_thread, new_thread;
  82     CBTACTIVATESTRUCT cbt;
  83 
  84     if (previous == hwnd)
  85     {
  86         if (prev) *prev = hwnd;
  87         return TRUE;
  88     }
  89 
  90     /* call CBT hook chain */
  91     cbt.fMouse     = mouse;
  92     cbt.hWndActive = previous;
  93     if (HOOK_CallHooks( WH_CBT, HCBT_ACTIVATE, (WPARAM)hwnd, (LPARAM)&cbt,
TRUE )) return FALSE;
  94 
  95     if (IsWindow(previous))
  96     {
  97         SendMessageW( previous, WM_NCACTIVATE, FALSE, (LPARAM)hwnd );
  98         SendMessageW( previous, WM_ACTIVATE,
  99                       MAKEWPARAM( WA_INACTIVE, IsIconic(previous) ),
(LPARAM)hwnd );
 100     }
 101 
 102     SERVER_START_REQ( set_active_window )
 103     {
 104         req->handle = wine_server_user_handle( hwnd );
 105         if ((ret = !wine_server_call_err( req )))
 106             previous = wine_server_ptr_handle( reply->previous );
 107     }
 108     SERVER_END_REQ;
 109     if (!ret) return FALSE;
 110     if (prev) *prev = previous;
 111     if (previous == hwnd) return TRUE;
 112 
 113     if (hwnd)
 114     {
 115         /* send palette messages */
 116         if (SendMessageW( hwnd, WM_QUERYNEWPALETTE, 0, 0 ))
 117             SendMessageTimeoutW( HWND_BROADCAST, WM_PALETTEISCHANGING,
(WPARAM)hwnd, 0,
 118                                  SMTO_ABORTIFHUNG, 2000, NULL );
 119         if (!IsWindow(hwnd)) return FALSE;
 120     }
 121 
 122     old_thread = previous ? GetWindowThreadProcessId( previous, NULL ) :
0;
 123     new_thread = hwnd ? GetWindowThreadProcessId( hwnd, NULL ) : 0;
 124 
...
--- snip ---

The app's dialog message handler doesn't expect this, accessing data structures
that have not been allocated yet. The data structures are allocated when the
window proc handles 'WM_USER + 100'. That message is sent earlier from the
message handler during 'WM_INITDIALOG' handling via 'PostMessage()'.

Although the app's message handler contains code to handle palette messages,
it's not supposed to see them on a non-palletized device context.

You need to check whether the (desktop) device context supports color palettes
via 'RC_PALETTE & GetDeviceCaps (hdc, RASTERCAPS)' and only in that case send
palette messages.

I tested a small patch and it allows the installer to show the dialog and
proceed further.

$ sha1sum s-40a720.zip 
38481cbfa824101a833aa997a3584611c4090c1b  s-40a720.zip

$ du -sh s-40a720.zip 
24M    s-40a720.zip

$ wine --version
wine-3.14-161-g70fbfa2cb8

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list