jscript: Use BSTR also for pure IDispatch call in Object.hasOwnProperty.
This commit is contained in:
parent
67d86e630e
commit
52fc8b3d94
|
@ -113,6 +113,7 @@ static HRESULT Object_hasOwnProperty(script_ctx_t *ctx, vdisp_t *jsthis, WORD fl
|
|||
{
|
||||
jsstr_t *name;
|
||||
DISPID id;
|
||||
BSTR bstr;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("\n");
|
||||
|
@ -131,6 +132,7 @@ static HRESULT Object_hasOwnProperty(script_ctx_t *ctx, vdisp_t *jsthis, WORD fl
|
|||
BOOL result;
|
||||
|
||||
hres = jsdisp_is_own_prop(jsthis->u.jsdisp, name->str, &result);
|
||||
jsstr_release(name);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
|
||||
|
@ -139,22 +141,20 @@ static HRESULT Object_hasOwnProperty(script_ctx_t *ctx, vdisp_t *jsthis, WORD fl
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
if(is_dispex(jsthis)) {
|
||||
BSTR bstr;
|
||||
|
||||
bstr = SysAllocStringLen(name->str, jsstr_length(name));
|
||||
if(!bstr)
|
||||
return E_OUTOFMEMORY;
|
||||
bstr = SysAllocStringLen(NULL, jsstr_length(name));
|
||||
if(bstr)
|
||||
jsstr_flush(name, bstr);
|
||||
jsstr_release(name);
|
||||
if(!bstr)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
hres = IDispatchEx_GetDispID(jsthis->u.dispex, bstr,
|
||||
make_grfdex(ctx, fdexNameCaseSensitive), &id);
|
||||
SysFreeString(bstr);
|
||||
} else {
|
||||
OLECHAR *names = name->str;
|
||||
hres = IDispatch_GetIDsOfNames(jsthis->u.disp, &IID_NULL,
|
||||
&names, 1, ctx->lcid, &id);
|
||||
}
|
||||
if(is_dispex(jsthis))
|
||||
hres = IDispatchEx_GetDispID(jsthis->u.dispex, bstr, make_grfdex(ctx, fdexNameCaseSensitive), &id);
|
||||
else
|
||||
hres = IDispatch_GetIDsOfNames(jsthis->u.disp, &IID_NULL, &bstr, 1, ctx->lcid, &id);
|
||||
|
||||
SysFreeString(bstr);
|
||||
if(r)
|
||||
*r = jsval_bool(SUCCEEDED(hres));
|
||||
return S_OK;
|
||||
|
|
Loading…
Reference in New Issue