http://bugs.winehq.org/show_bug.cgi?id=7555
------- Additional Comments From damjan.jov@gmail.com 2007-12-03 01:19 ------- Confirming with GIT just after wine 0.9.32.
Firstly, Java 1.6 is a mission to install, it doesn't install properly unless you have MSVCR71.DLL around, and to reinstall it you have to delete ~/.wine. Is there some reason we don't have a builtin MSVCR71.DLL in wine?
If you attach winedbg before clicking on File->Save As, you get the following (from the beginning of the function where it crashes): 0x00411810: pushl $0xff 0x00411812: pushl $0x57e438 0x00411817: movl %fs:0x0,%eax 0x0041181d: pushl %eax 0x0041181e: movl %esp,%fs:0x00000000 0x00411825: subl $68,%esp 0x00411828: pushl %ebx 0x00411829: pushl %ebp 0x0041182a: pushl %esi 0x0041182b: pushl %edi 0x0041182c: movl %ecx,%esi 0x0041182e: call *0x5ac0e8 -> 0x7ee83956 GetVersion [/usr/src/wine/dlls/kernel32/version.c:110] in kernel32 0x00411834: movl %esi,%ecx 0x00411836: movzbl %eax,%ebx 0x00411839: call 0x004114c0 0x0041183e: movl %eax,%edi CRASH=> 0x00411840: movl 0x20(%edi),%ecx 0x00411843: leal 0x10(%esp),%eax 0x00411847: pushl %eax 0x00411848: pushl %ecx 0x00411849: call *0x5ae774 -> 0x7eb977d1 GetWindowRect [/usr/src/wine/dlls/user32/winpos.c:168] in user32
So function 0x004114c0 returns 0, and the code expects something else. Unfortunately function 0x004114c0 is long and complicated.
A +all trace is not very revealing either:
0009:Call user32.GetWindow(0001009e,00000002) ret=004115fb 0009: get_window_tree( handle=0x1009e ) 0009: get_window_tree() = 0 { parent=0x30080, owner=(nil), next_sibling=(nil), prev_sibling=0x1009c, first_sibling=0x100a6, last_sibling=0x1009e, first_child=0x100aa, last_child=0x100bc } 0009:Ret user32.GetWindow() retval=00000000 ret=004115fb 0009:CALL MFC71.2372(00000000) ret=00411601 0009:Call kernel32.TlsGetValue(00000004) ret=7c15aeac 0009:Ret kernel32.TlsGetValue() retval=001749b8 ret=7c15aeac 0009:Call kernel32.TlsGetValue(00000004) ret=7c15aeac 0009:Ret kernel32.TlsGetValue() retval=001749b8 ret=7c15aeac 0009:RET MFC71.2372() retval=00000000 ret=00411601 0009:CALL MFC71.578() ret=00411615 0009:RET MFC71.578() retval=7c220074 ret=00411615 0009:trace:seh:raise_exception code=c0000005 flags=0 addr=0x411840
It could be GetWindow returns 0, which is passed into MFC71.2372, which returns 0, which causes the crash. But GetWindow is asked for the next sibling, which is nil. Is it some obscure bug in wine's window management?