[PATCH] oleaut32: fixed 64bit crash on tmarshal test

Marcus Meissner marcus at jet.franken.de
Sat Nov 4 09:28:36 CDT 2017


On Sat, Nov 04, 2017 at 09:51:44AM +0300, Nikolay Sivov wrote:
> On 03.11.2017 14:15, Marcus Meissner wrote:
> > Test will fail now, but no longer crash.
> > 
> > Signed-off-by: Marcus Meissner <marcus at jet.franken.de>
> > ---
> >  dlls/oleaut32/tests/tmarshal.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c
> > index d2b8dc92d6..f19cbf451b 100644
> > --- a/dlls/oleaut32/tests/tmarshal.c
> > +++ b/dlls/oleaut32/tests/tmarshal.c
> > @@ -2010,7 +2010,8 @@ static void test_external_connection(void)
> >      todo_wine
> >      ok(external_connections == 2, "external_connections = %d\n", external_connections);
> >  
> > -    ITestSecondDisp_Release(second);
> > +    if (hres == S_OK) 
> > +        ITestSecondDisp_Release(second);
> >      todo_wine
> >      ok(external_connections == 2, "external_connections = %d\n", external_connections);
> >  
> > 
> 
> Any idea why is this specific to 64 bit?

Well, the call fails in because we have no 64bit typelib threaded marshaller.

The callchain goes to:

static HRESULT WINAPI
PSFacBuf_CreateProxy(
...
    proxy->asmstubs = VirtualAlloc(NULL, sizeof(TMAsmProxy) * nroffuncs, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if (!proxy->asmstubs) {
        ERR("Could not commit pages for proxy thunks (size %d)\n", sizeof(TMAsmProxy) * nroffuncs);
        CoTaskMemFree(proxy);
        return E_OUTOFMEMORY;
    }

this fails because the alloc fails due to size 0, because sizeof(TMAsmProxy) is 0, because that is not implemented for 64bit (yet).

We could exit PSFacBuf_CreateProxy earlier on x86_64 with a different error.

(or implement the typelib marshaller ;)

Ciao, Marcus



More information about the wine-devel mailing list