[Bug 7949] Quicktest Pro 8.2 fails to start up

Wine Bugs wine-bugs at winehq.org
Wed Apr 25 04:56:36 CDT 2007


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





------- Additional Comments From focht at gmx.net  2007-25-04 04:56 -------
Hello,

--- quote ---
Could you please provide +relay,+atl log?
--- quote ---

Not necessary, already found it.
Caused by a bug in wine ATL AtlInternalQueryInterface() implementation.

Getting a patch from following information into git is left to you :)

--- snip dlls/atl/atl_main.c ---
HRESULT WINAPI AtlInternalQueryInterface(void* this, const _ATL_INTMAP_ENTRY*
pEntries,  REFIID iid, void** ppvObject)
{
     int i = 0;
     HRESULT rc = E_NOINTERFACE;
     TRACE("(%p, %p, %p, %p)\n",this, pEntries, iid, ppvObject);
 
     if (IsEqualGUID(iid,&IID_IUnknown))
     {
         TRACE("Returning IUnknown\n");
         *ppvObject = this;
         IUnknown_AddRef((IUnknown*)this);
         return S_OK;
     }
  ....
--- snip dlls/atl/atl_main.c ---

The code to get the first interface (e.g. client says "give me IUnknown") is wrong.
And you should really validate [out] param...

--- snip dlls/atl/atl_main.c ---
HRESULT WINAPI AtlInternalQueryInterface(void* this, const _ATL_INTMAP_ENTRY*
pEntries,  REFIID iid, void** ppvObject)
{
    int i = 0;
    HRESULT rc = E_NOINTERFACE;
 
    TRACE("(%p, %p, %p, %p)\n",this, pEntries, iid, ppvObject);

    if (ppvObject == NULL)
	return E_POINTER;

    *ppvObject = NULL;

    /* first interface (IUnknown) requested by client? */
    if (IsEqualGUID(iid,&IID_IUnknown))
    {
        TRACE("Returning IUnknown\n");

        *ppvObject = (IUnknown*)((int)this+pEntries->dw);
        IUnknown_AddRef((IUnknown*)*ppvObject);

        return S_OK;
    }
  ...
--- snip dlls/atl/atl_main.c ---

Now it works as expected.
Though the software crashes later (due to other issues).

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.



More information about the wine-bugs mailing list