[Bug 35874] Warlock II - the Exiled (Steam Pre Release) crashes with native Visual C++ 2012 Redistributable

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Apr 29 16:16:28 CDT 2014


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

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

looking at the sparse information you gave (backtrace) this could be a
duplicate of bug 34480

I investigated bug 32559 'Warlock - Master of the Arcane 1.4' (Steam) which
turned out to be a dupe of bug 34480

--- snip ---
Unhandled exception: page fault on write access to 0x1c1fa000 in 32-bit code
(0x0600e4a8).
Register dump:
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
 EIP:0600e4a8 ESP:057df470 EBP:057df48c EFLAGS:00010202(  R- --  I   - - - )
 EAX:00000000 EBX:12799800 ECX:00000000 EDX:00000001
 ESI:12799f80 EDI:1c1f9fb0
Stack dump:
0x057df470:  1c1f9830 0fcc0040 0000007d 067b1dd1
0x057df480:  1c1f9830 12799800 00000800 057df520
0x057df490:  067b26d0 1c1f9830 12799800 00000800
0x057df4a0:  00000000 00000000 00000000 00000000
0x057df4b0:  16a679d0 00000200 00000200 00000800
0x057df4c0:  00040000 0df08950 00000200 00000200
Backtrace:
=>0 0x0600e4a8 in msvcr110 (+0xe4a8) (0x057df48c)
  1 0x067b26d0 in gameui (+0x426cf) (0x057df520)
...
  28 0x06790cba in gameui (+0x20cb9) (0x057dfab8)
  29 0x004cf4b4 in game (+0xcf4b3) (0x057dfac8)
...
  43 0x00519a64 in game (+0x119a63) (0x057dfddc)
  44 0x00519842 in game (+0x119841) (0x057dfdf0)
  45 0x0051a59c in game (+0x11a59b) (0x057dfe14)
  46 0x00a1bd26 in game (+0x61bd25) (0x057dfe60)
  47 0x7b85f3ac call_process_entry+0xb() in kernel32 (0x057dfe78)
...
0x0600e4a8: movq    %mm5,0x50(%edi)
Modules:
Module    Address            Debug info    Name (181 modules)
PE      240000-  3b9000    Deferred        fmodex
PE      3c0000-  3f2000    Deferred        curllib
PE      400000- 53d1000    Export          game
PE     57e0000- 5813000    Deferred        ssleay32
PE     5820000- 591e000    Deferred        libeay32
PE     5920000- 593b000    Deferred        openldap
PE     5940000- 5954000    Deferred        libsasl
PE     5960000- 5f67000    Deferred        bmcore
PE     5f70000- 5ff5000    Deferred        msvcp110
PE     6000000- 60d6000    Export          msvcr110
PE     60e0000- 65f6000    Deferred        gamelogic
PE     6600000- 676a000    Deferred        scriptengine
PE     6770000- 6c2f000    Export          gameui
PE     6c30000- 6c9c000    Deferred        fmod_event
PE     9f40000- a00c000    Deferred        steam
PE    10000000-101ff000    Deferred        d3dx9_43
PE    30000000-302c1000    Deferred        steam2
PE    38000000-38893000    Deferred        steamclient
PE    3b400000-3b41e000    Deferred        steam_api
...
Threads:
process  tid      prio (all id:s are in hex)
...
00000053 (D) C:\Program Files\Steam\SteamApps\common\Warlock 2\Game.exe
    0000005a    0
    00000059    0
    00000058    0
    00000057  -15
    00000054    0 <==
--- snip ---

Looking at the dlls mapped into crashing process address space and comparing it
to my installation of 'Warlock - Master of the Arcane 1.4':

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Steam/SteamApps/common/Warlock - Master
of the Arcane

$ ls -1 *.dll
BMCore.dll
fmod_event.dll
fmodex.dll
GameLogic.dll
GameUI.dll
ScriptEngine.dll
steam_api.dll
--- snip ---

Both have the same set of dlls.
So it's likely they share the same game engine.

Since you lack symbols my guess for the function in frame 0 would be memcpy()
(module is 'msvcr110.dll' and the instruction is typical for that).

The fault address 0x1c1fa000 is likely from heap (aligned -> page fault in
first page of unmapped area).
Some value in the thread stack such as 0x800 or 0x200 could be the copy count.

Since I can't buy every game off Steam just for having a look at it you need to
test the hypothesis.

Apply the following hack to recent Wine version (1.7.x) and report back.
Thanks.

--- snip ---
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 999dc5c..255887c 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -200,8 +200,9 @@ BOOL wined3d_resource_allocate_sysmem(struct
wined3d_resource *resource)
     void **p;
     SIZE_T align = RESOURCE_ALIGNMENT - 1 + sizeof(*p);
     void *mem;
+    UINT size = resource->size*2;

-    if (!(mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, resource->size +
align)))
+    if (!(mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size + align)))
         return FALSE;

     p = (void **)(((ULONG_PTR)mem + align) & ~(RESOURCE_ALIGNMENT - 1)) - 1;
--- snip ---

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