[Bug 35269] New: Mobile Master crashes on startup (array-index out of bounds for IFile_tid in scrrun get_typeinfo)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Dec 29 16:46:44 CST 2013


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

            Bug ID: 35269
           Summary: Mobile Master crashes on startup (array-index out of
                    bounds for IFile_tid in scrrun get_typeinfo)
           Product: Wine
           Version: 1.7.9
          Hardware: x86
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: scrrun
          Assignee: wine-bugs at winehq.org
          Reporter: focht at gmx.net
    Classification: Unclassified

Hello folks,

while verifying bug 27180 I stumbled into another problem :|

Relevant part of backtrace:

--- snip ---
Unhandled exception: page fault on read access to 0x00000001 in 32-bit code
(0xf7550803).
...
Backtrace:
=>0 0xf7550803 __memcmp_sse4_2+0x163() in libc.so.6 (0x0033e488)
  1 0x7e713a8e ITypeLib2_fnGetTypeInfoOfGuid+0xcd(iface=<couldn't compute
location>, guid=<couldn't compute location>, ppTInfo=<couldn't compute
location>) [/home/focht/projects/wine/wine-git/dlls/oleaut32/typelib.c:4960] in
oleaut32 (0x0033e488)
  2 0x7ded5435 get_typeinfo+0x81(tid=IFile_tid, typeinfo=0x33e548)
[/home/focht/projects/wine/wine-build32/dlls/scrrun/../../include/oaidl.h:2669]
in scrrun (0x0033e508)
  3 0x7ded0ad7 file_GetIDsOfNames+0xba(iface=<couldn't compute location>,
riid=<couldn't compute location>, rgszNames=<couldn't compute location>,
cNames=<couldn't compute location>, lcid=<couldn't compute location>,
rgDispId=<couldn't compute location>)
[/home/focht/projects/wine/wine-git/dlls/scrrun/filesystem.c:704] in scrrun
(0x0033e588)
  4 0x72a478d1 in msvbvm60 (+0x1078d0) (0x0033e5b8)
  5 0x72a48336 in msvbvm60 (+0x108335) (0x0033e5e4)
  6 0x72a410e0 in msvbvm60 (+0x1010df) (0x0033f848)
  7 0x72991d33 in msvbvm60 (+0x51d32) (0x0033f854)
  8 0x004454e4 in mobilemaster (+0x454e3) (0x0033f864)
...
0xf7550803 __memcmp_sse4_2+0x163 in libc.so.6: movl    0xfffffff0(%edx),%ebx
Modules:
Module    Address            Debug info    Name (72 modules)
PE      400000-  bc6000    Export          mobilemaster
PE    113d0000-114c0000    Deferred        tssofficemenu1d
PE    72940000-72a93000    Export          msvbvm60
ELF    7b800000-7ba61000    Dwarf           kernel32<elf>
...
Threads:
process  tid      prio (all id:s are in hex)
...
00000024 MMStarter.exe
    00000025    0
00000026 (D) C:\Program Files\Mobile Master\MobileMaster.exe
    00000029    0
    00000028    0
    00000027    0 <== 
--- snip ---

Trace log with +ole gives a bit of hint ...

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Mobile Master

$ WINEDEBUG=+tid,+seh,+relay,+scrrun,+typelib wine ./MMStarter.exe >>log.txt
2>&1
...

0026:trace:scrrun:file_GetIDsOfNames
(0x152b538)->({00000000-0000-0000-0000-000000000000} 0x33e5c0 1 1033 0x33e5c4)
0026:trace:ole:ITypeLib2_fnGetTypeInfoOfGuid 0x173af8 <guid-0x0001> 0x33e4c4
0026:trace:seh:raise_exception code=c0000005 flags=0 addr=0xf748d803
ip=f748d803 tid=0026
0026:trace:seh:raise_exception  info[0]=00000000
0026:trace:seh:raise_exception  info[1]=00000001
0026:trace:seh:raise_exception  eax=001773d8 ebx=f748d800 ecx=42c642c1
edx=00000011 esi=0033e4a0 edi=7deecda0
0026:trace:seh:raise_exception  ebp=0033e488 esp=0033e428 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010287
--- snip ---

Strange GUID in second parameter of ITypeLib2_fnGetTypeInfoOfGuid() ;-)

Source:
http://source.winehq.org/git/wine.git/blob/a29d77088ac2b07fb68d84646be2884f49e9df7a:/dlls/scrrun/scrrun_private.h#l24

--- snip ---
24 typedef enum tid_t
25 {
26     NULL_tid,
27     IDictionary_tid,
28     IFileSystem3_tid,
29     IFolder_tid,
30     ITextStream_tid,
31     IFile_tid,
32     LAST_tid
33 } tid_t;
--- snip ---

The corresponding array and referencing code:

Source:
http://source.winehq.org/git/wine.git/blob/a29d77088ac2b07fb68d84646be2884f49e9df7a:/dlls/scrrun/scrrun.c#l103

--- snip ---
103 static REFIID tid_ids[] = {
104     &IID_NULL,
105     &IID_IDictionary,
106     &IID_IFileSystem3,
107     &IID_IFolder,
108     &IID_IFile
109 };

...

127 HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
128 {
...
136     if(!typeinfos[tid]) {
137         ITypeInfo *ti;
138
139         hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &ti);
140         if(FAILED(hres)) {
141             ERR("GetTypeInfoOfGuid(%s) failed: %08x\n",
debugstr_guid(tid_ids[tid]), hres);
142         }
144
...
151 }
--- snip ---

'ITextStream_tid' was added with commit
http://source.winehq.org/git/wine.git/commitdiff/49a8d4ecb0cb868451c7ba3ded34d4e69248d8c4
but the array was not synchronized leading to out-of-bound indexing for
'IFile_tid'.

$ sha1sum MobileMasterInst.exe 
0bedc83c67f4a0181aac916150457f395f095526  MobileMasterInst.exe

$ du -sh MobileMasterInst.exe 
21M    MobileMasterInst.exe

$ wine --version
wine-1.7.9-209-gb231b4b

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