[Bug 14015] New: Eclipse 3.3.x (customized) crashes on null REFCLSID passed to ole32.WriteClassStg

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Jun 20 05:48:54 CDT 2008


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

           Summary: Eclipse 3.3.x (customized) crashes on null REFCLSID
                    passed to ole32.WriteClassStg
           Product: Wine
           Version: CVS/GIT
          Platform: PC
               URL: http://www.eclipse.org/downloads
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ole
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: focht at gmx.net


Created an attachment (id=14205)
 --> (http://bugs.winehq.org/attachment.cgi?id=14205)
Patch to handle null REFCLSID in ole32.WriteClassStg properly

Hello,

this bug report is based on a (Customer) Eclipse 3.3 Europa with lots of
additional plugins (OpenArchitectureWare/Enterprise Architect
Integration/Microsoft Pict).
It's not encountered with standard Eclipse 3.3 version.

The first crash is due to not handling null REFCLSID in ole32.WriteClassStg:

--- snip ---
..
err:ole:apartment_getclassobject DllGetClassObject returned error 0x80004002
err:ole:CoGetClassObject no class object {8856f961-340a-11d0-a96b-00c04fd705a2}
could be created for context 0x3
fixme:shdocvw:PersistStorage_InitNew (0x5566ea0)->(0x6825678)
fixme:shdocvw:PersistStorage_GetClassID (0x5566ea0)->(0x33e8c8)
fixme:shdocvw:ViewObject_SetAdvise (0x5566ea0)->(1 00000000 0x5f557e8)
fixme:shdocvw:OleObject_Advise (0x5566ea0)->(0x5f557e8, 0x29ae950)
fixme:shdocvw:WebBrowser_QueryInterface
(0x5566ea0)->({0000011d-0000-0000-c000-000000000046} 0x29ae950) interface not
supported
fixme:shdocvw:PersistStorage_GetClassID (0x5566ea0)->(0x33e97c)
fixme:shdocvw:PersistStorage_Save (0x5566ea0)->(0x6825678 1)
First chance exception: page fault on read access to 0x00000000 in 32-bit code
(0x60cccd3b).
..
Backtrace:
=>1 0x60cccd3b StorageBaseImpl_SetClass+0x9b(iface=0x6825678, clsid=0x0)
[/home/focht/wine-git/dlls/ole32/storage32.c:1136] in ole32 (0x0033e96c)
  2 0x60cc63f1 WriteClassStg+0x21(pStg=0x6825678, rclsid=0x0)
[/home/focht/wine-git/dlls/ole32/storage32.c:6290] in ole32 (0x0033e97c)
  3 0x0505589b in swt-win32-3349 (+0x2589b) (0x0033e9a8)
  4 0x00749c91 XChangeKeyboardControl+0x111() in libx11.so.6 (0x0033e9e8)
  5 0x00742dd5 in libx11.so.6 (+0xddd5) (0x0033ea20)
..
--- snip ---

For the interested, the relevant Eclipse JNI COM wrapper snippet reads like
this:

--- snip (swt-win32-3349.dll) ---
/*
 * Class:     org_eclipse_swt_internal_ole_win32_COM
 * Method:    WriteClassStg
 * Signature: (ILorg/eclipse/swt/internal/ole/win32/GUID;)I
 */
JNIEXPORT jint JNICALL
Java_org_eclipse_swt_internal_ole_win32_COM_WriteClassStg
  (JNIEnv *env, jclass that, jint pStg, jobject rclsid)
{
    GUID guid, *rclsid1=NULL;
    jint rc;

#ifdef DEBUG_CALL_PRINTS
    fprintf(stderr, "WriteClassStg\n");
#endif
    if (rclsid) {
        rclsid1=&guid;
        getGUIDFields(env, rclsid, rclsid1);
    }
    rc = (jint) WriteClassStg((IStorage *)pStg, rclsid1);

    if (rclsid) {
        setGUIDFields(env, rclsid, rclsid1);
    }
    return rc;
} 
--- snip (swt-win32-3349.dll) ---

If for whatever reason, a null rclsid is passed in, NULL will be passed to
WriteClassStg.
Wine should handle this case properly.

With attached patch it goes further - to crash again (separate bug report).

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