https://bugs.winehq.org/show_bug.cgi?id=38014
Bug ID: 38014 Summary: CCCP Insurgent v2007-01-01 crashes when querying system information via DxDiag Product: Wine Version: 1.7.35 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
as the summary says.
--- snip --- $ WINEDEBUG=+tid,+seh,+relay,+dxdiag,+variant,+ole wine ./CCCP-Insurgent-2007-01-01.exe >>log.txt 2>&1 ... 0024:trace:dxdiag:IDxDiagProviderImpl_GetRootContainer (0x1790a8,0x90e940) 0024:trace:dxdiag:DXDiag_CreateDXDiagContainer ({7d0f462f-4064-4862-bc7f-933e5058c10f}, 0x90e940) 0024:Call ntdll.RtlAllocateHeap(00110000,00000000,00000010) ret=7d3aabbc 0024:Ret ntdll.RtlAllocateHeap() retval=001829c8 ret=7d3aabbc 0024:trace:dxdiag:IDxDiagProviderImpl_AddRef (0x1790a8)->(ref before=1) 0024:trace:dxdiag:IDxDiagContainerImpl_AddRef (0x1829c8)->(ref before=0) 0024:trace:dxdiag:IDxDiagContainerImpl_GetChildContainer (0x1829c8, L"DxDiag_SystemInfo", 0x90e8f8) 0024:Call ntdll.RtlAllocateHeap(00110000,00000000,00000024) ret=7d3aa540 0024:Ret ntdll.RtlAllocateHeap() retval=00195b10 ret=7d3aa540 0024:trace:dxdiag:IDxDiagContainerImpl_GetChildContainer Trying to get container L"DxDiag_SystemInfo" 0024:Call KERNEL32.lstrcmpW(00179130 L"DxDiag_SystemInfo",00195b10 L"DxDiag_SystemInfo") ret=7d3aa413 0024:Ret KERNEL32.lstrcmpW() retval=00000000 ret=7d3aa413 0024:trace:dxdiag:DXDiag_CreateDXDiagContainer ({7d0f462f-4064-4862-bc7f-933e5058c10f}, 0x90e8f8) 0024:Call ntdll.RtlAllocateHeap(00110000,00000000,00000010) ret=7d3aabbc 0024:Ret ntdll.RtlAllocateHeap() retval=001958c8 ret=7d3aabbc 0024:trace:dxdiag:IDxDiagProviderImpl_AddRef (0x1790a8)->(ref before=2) 0024:trace:dxdiag:IDxDiagContainerImpl_AddRef (0x1958c8)->(ref before=0) 0024:trace:dxdiag:IDxDiagContainerImpl_GetChildContainer Succeeded in getting the container instance 0024:Call ntdll.RtlFreeHeap(00110000,00000000,00195b10) ret=7d3aa76f 0024:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d3aa76f 0024:trace:dxdiag:IDxDiagContainerImpl_EnumChildContainerNames (0x1958c8, 0, 0x90e6d0, 256) 0024:trace:dxdiag:IDxDiagContainerImpl_EnumChildContainerNames Failed to find container name at specified index 0024:trace:dxdiag:IDxDiagContainerImpl_GetChildContainer (0x1958c8, L"", 0x90e8fc) 0024:Call ntdll.RtlAllocateHeap(00110000,00000000,00000002) ret=7d3aa540 0024:Ret ntdll.RtlAllocateHeap() retval=0018a4b8 ret=7d3aa540 0024:trace:dxdiag:IDxDiagContainerImpl_GetChildContainer Trying to get container L"" 0024:Call ntdll.RtlFreeHeap(00110000,00000000,0018a4b8) ret=7d3aa76f 0024:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d3aa76f 0024:trace:dxdiag:IDxDiagContainerImpl_Release (0x1958c8)->(ref before=1) 0024:trace:dxdiag:IDxDiagProviderImpl_Release (0x1790a8)->(ref before=3) 0024:Call ntdll.RtlFreeHeap(00110000,00000000,001958c8) ret=7d3aa14d 0024:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7d3aa14d 0024:Call oleaut32.VariantInit(0090e6c0) ret=0040b276 0024:trace:variant:VariantInit (0x90e6c0) 0024:Ret oleaut32.VariantInit() retval=0090e6c0 ret=0040b276 0024:trace:seh:raise_exception code=c0000005 flags=0 addr=0x40b276 ip=0040b276 tid=0024 0024:trace:seh:raise_exception info[0]=00000000 0024:trace:seh:raise_exception info[1]=00000000 0024:trace:seh:raise_exception eax=0090e6c0 ebx=005659c8 ecx=0090e8d8 edx=0090ef8c esi=0090e928 edi=00000000 0024:trace:seh:raise_exception ebp=0090e740 esp=0090e6c0 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00210206 0024:trace:seh:call_stack_handlers calling handler at 0x5341e2 code=c0000005 flags=0 --- snip ---
The app doesn't have proper error handling (HRESULT check), it just continues after failure of 'IDxDiagContainer::EnumChildContainerNames' on 'DxDiag_SystemInfo' container. The following 'IDxDiagContainer::GetChildContainer' method call gets an empty string passed. The app expects a valid 'IDxDiagContainer' instance - the current container.
After fixing this there is another crash, albeit different issue ('DxDiag_SoundDevices' props missing).
$ sha1sum CCCP-Insurgent-2007-01-01.exe 21a1171a7993aef75bcfc8304a09333c77bb32a2 CCCP-Insurgent-2007-01-01.exe
$ du -sh CCCP-Insurgent-2007-01-01.exe 608K CCCP-Insurgent-2007-01-01.exe
Regards