[Bug 28485] Pegasus Mail version 4.62 crashes on startup (needs GetProcessDEPPolicy stub)

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Oct 19 16:44:04 CDT 2011


http://bugs.winehq.org/show_bug.cgi?id=28485

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at gmx.net
          Component|-unknown                    |kernel32
            Summary|Pegasus Mail version 4.62   |Pegasus Mail version 4.62
                   |crashes on startup          |crashes on startup (needs
                   |                            |GetProcessDEPPolicy stub)

--- Comment #8 from Anastasius Focht <focht at gmx.net> 2011-10-19 16:44:04 CDT ---
Hello,

the problem is the missing GetProcessDEPPolicy() API.

Some app code in "IERenderer.dll" dll entry manually resolves various API using
GetProcAddress() and stores the API entry addresses in a table (IAT style).

--- snip ---
...
0024:Call KERNEL32.GetProcAddress(7b810000,019891c4 "GetProcessDEPPolicy")
ret=016cc21b
0024:Ret  KERNEL32.GetProcAddress() retval=00000000 ret=016cc21b
...
0024:Call KERNEL32.GetProcAddress(7b810000,019891c4 "SetProcessDEPPolicy")
ret=016cc21b
0024:Ret  KERNEL32.GetProcAddress() retval=7b824a38 ret=016cc21b 
...
--- snip ---

Later the app calls most of the API directly - without validation.
Using GetVersionEx() it determined the Windows version and relied on this
information - assuming specific APIs are present.
Wine implements API on demand and does not provide a stub for every API leading
to failure.

--- snip ---
0024:trace:seh:raise_exception code=c0000005 flags=0 addr=0x7bc7d333
ip=7bc7d333 tid=0024
0024:trace:seh:raise_exception  info[0]=00000000
0024:trace:seh:raise_exception  info[1]=00000000
0024:trace:seh:raise_exception  eax=00000000 ebx=7bcc7ff4 ecx=67c24165
edx=00000000 esi=01801f5c edi=0000008f
0024:trace:seh:raise_exception  ebp=0032eb64 esp=0032ea6c cs=0073 ds=007b
es=007b fs=0033 gs=003b flags=00210246
0024:trace:seh:call_vectored_handlers calling handler at 0x7e00f3cd
code=c0000005 flags=0
0024:trace:seh:call_vectored_handlers handler at 0x7e00f3cd returned 0
0024:trace:seh:call_stack_handlers calling handler at 0x7bc980b5 code=c0000005
flags=0
0024:trace:seh:__regs_RtlUnwind code=c0000005 flags=2
0024:trace:seh:__regs_RtlUnwind calling handler at 0x7bc7ae27 code=c0000005
flags=2
0024:trace:seh:__regs_RtlUnwind handler at 0x7bc7ae27 returned 1
0024:trace:seh:raise_exception code=c0000005 flags=0 addr=(nil) ip=00000000
tid=0024
0024:trace:seh:raise_exception  info[0]=00000000
0024:trace:seh:raise_exception  info[1]=00000000
0024:trace:seh:raise_exception  eax=00000000 ebx=0000008e ecx=00000000
edx=00000000 esi=01801f5c edi=0000008f
0024:trace:seh:raise_exception  ebp=0032ef00 esp=0032eed8 cs=0073 ds=007b
es=007b fs=0033 gs=003b flags=00210206
0024:trace:seh:call_vectored_handlers calling handler at 0x7e00f3cd
code=c0000005 flags=0
0024:trace:seh:call_vectored_handlers handler at 0x7e00f3cd returned 0
0024:trace:seh:call_stack_handlers calling handler at 0x1801ff9 code=c0000005
flags=0
0024:trace:seh:call_stack_handlers handler at 0x1801ff9 returned 1
0024:trace:seh:call_stack_handlers calling handler at 0x16c5c9e code=c0000005
flags=0
0024:Call user32.LoadStringW(016c0000,0000ffec,0032c700,00001000) ret=016ca6c6
0024:Ret  user32.LoadStringW() retval=00000004 ret=016ca6c6
0024:Call KERNEL32.VirtualQuery(00000000,0032e974,0000001c) ret=016d99a0
0024:Ret  KERNEL32.VirtualQuery() retval=0000001c ret=016d99a0
0024:Call user32.LoadStringW(016c0000,0000ffe2,0032c6f8,00001000) ret=016ca6c6
0024:Ret  user32.LoadStringW() retval=00000030 ret=016ca6c6
0024:Call ntdll.RtlUnwind(0032ef08,016c5694,0032ee80,00000000) ret=016c5694 
--- snip ---

The first exception is actually Wine itself, trying to figure out if this is an
ATL thunk to be emulated.

http://source.winehq.org/git/wine.git/blob/62b7069fa941c6ac1c923f0a7986261e290862c0:/dlls/ntdll/signal_i386.c#l1536

Small nitpick ;-) One could check for NULL pc before trying this (line 1543),
avoiding one extra exception ("call <null ptr>" is common for missing
API/unimpl stubs bugs).

The second exception is the real one passed to app. Unfortunately this all
happens in dll entry point with loader lock, hence the hang/winedbg behaviour.

Add GetProcessDEPPolicy() stub and the app happily starts, showing main GUI.
Though it will complain later about other Wine insufficiencies, deserving own
bugs.

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
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