WineHQ
Bug Tracking Database – Bug 27364

 Bugzilla

 

Last modified: 2014-02-20 12:36:50 UTC  

Osu! fails to install (ole32.IIDFromString returns unexpected error code)

Bug 27364 - Osu! fails to install (ole32.IIDFromString returns unexpected error code)
Osu! fails to install (ole32.IIDFromString returns unexpected error code)
Status: CLOSED FIXED
AppDB: Show Apps affected by this bug
Product: Wine
Classification: Unclassified
Component: ole32
1.3.21
x86 Linux
: P2 normal
: ---
Assigned To: Mr. Bugs
http://osu.ppy.sh
: dotnet, download, Installer
Depends on:
Blocks:
  Show dependency tree
 
Reported: 2011-06-01 15:48 UTC by Andrew Leslie
Modified: 2014-02-20 12:36 UTC (History)
4 users (show)

See Also:
Regression SHA1:
Fixed by SHA1: cdd932a060fa8b86b009dd7a87dacc4b62eda447
Distribution: ---
Staged patchset:


Attachments
Log output (13.52 KB, text/plain)
2011-06-01 15:48 UTC, Andrew Leslie
Details
Updated Log output (20.34 KB, text/plain)
2011-06-01 16:36 UTC, Andrew Leslie
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Leslie 2011-06-01 15:48:15 UTC
Created attachment 34987 [details]
Log output

Upon installation, crashes.
Comment 1 Juan Lang 2011-06-01 16:11:17 UTC
Not major.
Comment 2 Austin English 2011-06-01 16:30:52 UTC
Does this program have a download available? Have you installed native dotnet20?
Comment 3 Andrew Leslie 2011-06-01 16:33:44 UTC
Added Download URL ---- Reinstalled wine to check for dotnet will update after.
Comment 4 Andrew Leslie 2011-06-01 16:36:03 UTC
Created attachment 34988 [details]
Updated Log output
Comment 5 Andrew Leslie 2011-06-01 16:37:26 UTC
Updated Log ouput is after a complete reinstall of wine and dotnet.
Comment 6 Austin English 2011-06-01 17:04:36 UTC
fixme:shell:URL_ParseUrl failed to parse L"System"
fixme:shell:URL_ParseUrl failed to parse L"System.Windows.Forms"
fixme:shell:URL_ParseUrl failed to parse L"System.Drawing"
fixme:shell:URL_ParseUrl failed to parse L"Microsoft.Xna.Framework"
fixme:shell:URL_ParseUrl failed to parse L"msvcm80"
fixme:advapi:LsaOpenPolicy ((null),0x33f1c8,0x00000800,0x33f170) stub
fixme:thread:NtQueryInformationThread Cannot get kerneltime or usertime of other threads
...
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Security.Principal.SecurityIdentifier.TranslateToNTAccounts(IdentityReferenceCollection sourceSids, Boolean& someFailed)
   at System.Security.Principal.SecurityIdentifier.Translate(IdentityReferenceCollection sourceSids, Type targetType, Boolean& someFailed)
   at System.Security.Principal.SecurityIdentifier.Translate(IdentityReferenceCollection sourceSids, Type targetType, Boolean forceSuccess)
   at System.Security.Principal.SecurityIdentifier.Translate(Type targetType)
   at #pg.#qh.#p2(Boolean )
   at #pg.#og.#aN()

Confirming, though doesn't look mscoree related, afaict.
Comment 7 Pablo Olmos de Aguilera C. 2012-02-20 15:48:11 UTC
I can confirm this on Arch Linux x64 bit running the install on a clean win32 prefix, with dotnet20, gdiplus and fontfix installed before.

The log I get is similar, so I'm not posting mine again.

Any way I could help I'll be happy to do it :)
Comment 8 Anastasius Focht 2014-02-08 17:06:57 UTC
Hello folks,

confirming, the installer still fails.
The original issue has most likely evolved/was fixed a long time ago.

Prerequisite: 'winetricks -q dotnet35sp1'

--- snip ---
$ WINEDEBUG=+tid,+seh,+relay wine ./osu\!install.exe >>log.txt 2>&1
...
0024:Call ole32.IIDFromString(03357728 L"{C:\\users\\focht\\Temp\\{7DCAD80E-DDB2-42DC-92F9-92E9AE2D561C}\\osu!.msi}",0033e4a4) ret=004530b2
...
0024:Call ntdll.NtCreateKey(0033e1c4,02000000,0033e1ac,00000000,00000000,00000000,00000000) ret=7e5ae0a0
0024:Ret  ntdll.NtCreateKey() retval=00000000 ret=7e5ae0a0
0024:Call ntdll.RtlInitUnicodeString(0033e230,0014cd98 L"{C:\\users\\focht\\Temp\\{7DCAD80E-DDB2-42DC-92F9-92E9AE2D561C}\\osu!.msi}\\CLSID") ret=7e5ae507
0024:Ret  ntdll.RtlInitUnicodeString() retval=0033e230 ret=7e5ae507
0024:Call ntdll.NtOpenKey(0033e288,02000000,0033e238) ret=7e5ae523
0024:Ret  ntdll.NtOpenKey() retval=c0000034 ret=7e5ae523
0024:Call ntdll.RtlNtStatusToDosError(c0000034) ret=7e5ae52e
0024:Ret  ntdll.RtlNtStatusToDosError() retval=00000002 ret=7e5ae52e
0024:Call ntdll.RtlFreeHeap(00110000,00000000,0014cd98) ret=7e5b2ac2
0024:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7e5b2ac2
0024:Ret  ole32.IIDFromString() retval=800401f3 ret=004530b2 
...
0024:Call KERNEL32.FormatMessageW(00001100,00000000,800401f3,00000400,0033e288,00000000,00000000) ret=0041a52d
0024:Ret  KERNEL32.FormatMessageW() retval=00000000 ret=0041a52d 
...
0024:Call KERNEL32.WideCharToMultiByte(00000000,00000000,03357d68 L"0x800401f3 - Error in ::IIDFromString('C:\\users\\focht\\Temp\\{7DCAD80E-DDB2-42DC-92F9-92E9AE2D561C}\\osu!.msi'): 0x800401f3",ffffffff,00000000,00000000,00000000,00000000) ret=00416855
0024:Ret  KERNEL32.WideCharToMultiByte() retval=00000079 ret=00416855 
...
0024:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,0033e370) ret=0048ff02
0024:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b83a97b ip=7b83a97b tid=0024
0024:trace:seh:raise_exception  info[0]=19930520
0024:trace:seh:raise_exception  info[1]=0033e494
0024:trace:seh:raise_exception  info[2]=004f7698
0024:trace:seh:raise_exception  eax=7b8269e1 ebx=7b8bb000 ecx=19930520 edx=0033e2b4 esi=0033e35c edi=0033e320
0024:trace:seh:raise_exception  ebp=0033e2f8 esp=0033e294 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00200283 
--- snip ---

IIDFromString() failure is expected.

The error code 0x800401f3 -> CO_E_CLASSSTRING returned by Wine is something the installer doesn't expect.

MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/ms687262%28v=vs.85%29.aspx

--- quote ---
IIDFromString function

Converts a string generated by the StringFromIID function back into the original interface identifier (IID).

...
Return value

This function can return the standard return values E_INVALIDARG, E_OUTOFMEMORY, and S_OK.
...
--- quote ---

The installer (caller) code disassembly reveals it only handles E_INVALIDARG and CO_E_IIDSTRING:

--- snip ---
...
004530AA   51               PUSH ECX
004530AB   50               PUSH EAX
004530AC   FF15 94264D00    CALL DWORD PTR DS:[<&ole32.IIDFromString>
004530B2   6A 00            PUSH 0
004530B4   6A 01            PUSH 1
004530B6   8D75 B4          LEA ESI,DWORD PTR SS:[EBP-4C]
004530B9   8BF8             MOV EDI,EAX
004530BB   E8 F144FBFF      CALL osu!inst.004075B1
004530C0   81FF F4010480    CMP EDI,800401F4            ; CO_E_IIDSTRING
004530C6   0F84 CF000000    JE osu!inst.0045319B
004530CC   81FF 57000780    CMP EDI,80070057            ; E_INVALIDARG
004530D2   0F84 C3000000    JE osu!inst.0045319B
004530D8   85FF             TEST EDI,EDI
004530DA   0F84 B7000000    JE osu!inst.00453197
004530E0   0F8D B5000000    JGE osu!inst.0045319B
...
--- snip ---

The problem can be attributed to Wine's code sharing in this place.

CLSIDFromString() and IIDFromString() share the same implementation (IIDFromString forwards to CLSIDFromString).

CLSIDFromString() can return more/different error codes than IIDFromString() as documented in MSDN.

Source: http://source.winehq.org/git/wine.git/blob/62d9b5a0e079b6db8c16444d92fe85cfa8e10f41:/dlls/ole32/compobj.c#l2068

$ sha1sum osu\!install.exe 
876bfc53a7bbd1948c44b0e58ed09e93fd8fcffe  osu!install.exe

$ du -sh osu\!install.exe 
48M	osu!install.exe

$ wine --version
wine-1.7.12

Regards
Comment 9 Nikolay Sivov 2014-02-09 05:26:27 UTC
Apparently our IIDFromString() is also broken in a way that it shouldn't try to handle ProdIDs as CLSIDFromString() does. I working on splitting this up.
Comment 10 Anastasius Focht 2014-02-10 13:42:31 UTC
Hello folks,

the issue from the summary is fixed by commit http://source.winehq.org/git/wine.git/commitdiff/cdd932a060fa8b86b009dd7a87dacc4b62eda447

Unfortunately the installer still fails, now with Austin's backtrace from comment #6 

--- snip ---
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Security.Principal.SecurityIdentifier.TranslateToNTAccounts(IdentityReferenceCollection sourceSids, Boolean& someFailed)
   at System.Security.Principal.SecurityIdentifier.Translate(IdentityReferenceCollection sourceSids, Type targetType, Boolean& someFailed)
   at System.Security.Principal.SecurityIdentifier.Translate(IdentityReferenceCollection sourceSids, Type targetType, Boolean forceSuccess)
   at System.Security.Principal.SecurityIdentifier.Translate(Type targetType)
   at #1h.#0h.#OL(Boolean )
   at #1h.#np.#Hwb()
--- snip ---

I'll create a new bug for that.

Regards
Comment 11 Alexandre Julliard 2014-02-20 12:36:50 UTC
Closing bugs fixed in 1.7.13.


Privacy Policy
If you have a privacy inquiry regarding this site, please write to [email protected]

Hosted By CodeWeavers