[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