[PATCH] ole32: check for interface NULL which happens with e.g. Abiword
Marcus Meissner
marcus at jet.franken.de
Wed Sep 15 07:29:08 CDT 2010
On Wed, Sep 15, 2010 at 12:40:46PM +0100, Huw Davies wrote:
> On Wed, Sep 15, 2010 at 01:34:06PM +0200, Marcus Meissner wrote:
> > On Wed, Sep 15, 2010 at 12:22:57PM +0100, Huw Davies wrote:
> > > On Wed, Sep 15, 2010 at 08:04:51PM +0900, Dmitry Timoshkov wrote:
> > > > Marcus Meissner <marcus at jet.franken.de> wrote:
> > > >
> > > > > + if (!unk) {
> > > > > + FIXME("hr was %d, but unk is NULL?\n", hr);
> > > > > + return E_FAIL;
> > > > > + }
> > > >
> > > > IDropTarget_QueryInterface() should be fixed instead.
> > >
> > > The implementation is in abiword, so that would be tricky.
> > >
> > > Marcus, you're leaking a stream in this error path. Better
> > > to do something like:
> > > if(FAILED(hr) || !unk)
> >
> > yeah, but what error to return :/
>
> Yeah, sorry. Something like:
> if(!unk) hr = E_NOINTERFACE;
> right after the QI call.
I ran testbot, https://testbot.winehq.org/JobDetails.pl?Key=5239
and it also has 0 as hr for the case.
So returning failure might not be right approach.
Abiword has this code btw:
STDMETHODIMP XAP_Win32DropTarget::QueryInterface(REFIID /*riid*/, LPVOID FAR* /*ppvObj*/)
{
return S_OK;
}
The fun...
Would erroring out be right?
If an interface directly inherits IUnknown, do we need a QueryInterface or could we just cast?
Ciao, Marcus
More information about the wine-devel
mailing list