diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 40792423281..fc8bd556a14 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -221,7 +221,7 @@ static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, const FUN
data->funcs[data->func_cnt].id = desc->memid;
data->funcs[data->func_cnt].tid = tid;
- data->funcs[data->func_cnt].func_disp_idx = desc->invkind == DISPATCH_METHOD ? data->func_disp_cnt++ : -1;
+ data->funcs[data->func_cnt].func_disp_idx = (desc->invkind & DISPATCH_METHOD) ? data->func_disp_cnt++ : -1;
data->func_cnt++;
}
@@ -515,6 +515,9 @@ static HRESULT function_value(IUnknown *iface, LCID lcid, WORD flags, DISPPARAMS
HRESULT hres;
switch(flags) {
+ case DISPATCH_METHOD|DISPATCH_PROPERTYGET:
+ if(!res)
+ return E_INVALIDARG;
case DISPATCH_METHOD:
hres = typeinfo_invoke(This->obj, This->info, flags, params, res, ei);
break;
@@ -571,8 +574,10 @@ static HRESULT function_invoke(DispatchEx *This, func_info_t *func, WORD flags,
HRESULT hres;
switch(flags) {
- case DISPATCH_METHOD:
case DISPATCH_METHOD|DISPATCH_PROPERTYGET:
+ if(!res)
+ return E_INVALIDARG;
+ case DISPATCH_METHOD:
hres = typeinfo_invoke(This, func, flags, dp, res, ei);
break;
case DISPATCH_PROPERTYGET: {
@@ -810,6 +815,9 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
var = &This->dynamic_data->props[idx].var;
switch(wFlags) {
+ case DISPATCH_METHOD|DISPATCH_PROPERTYGET:
+ if(!pvarRes)
+ return E_INVALIDARG;
case DISPATCH_METHOD: {
DISPID named_arg = DISPID_THIS;
DISPPARAMS dp = {NULL, &named_arg, 0, 1};