mshtml: Properly handle duplicated names with different DISPIDs in add_func_info.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2016-07-07 12:50:03 +02:00 committed by Alexandre Julliard
parent 91e7a02845
commit c20c47b85e
1 changed files with 12 additions and 6 deletions

View File

@ -231,12 +231,19 @@ static BOOL is_arg_type_supported(VARTYPE vt)
static void add_func_info(dispex_data_t *data, tid_t tid, const FUNCDESC *desc, ITypeInfo *dti) static void add_func_info(dispex_data_t *data, tid_t tid, const FUNCDESC *desc, ITypeInfo *dti)
{ {
func_info_t *info; func_info_t *info;
BSTR name;
HRESULT hres; HRESULT hres;
hres = ITypeInfo_GetDocumentation(dti, desc->memid, &name, NULL, NULL, NULL);
if(FAILED(hres))
return;
for(info = data->funcs; info < data->funcs+data->func_cnt; info++) { for(info = data->funcs; info < data->funcs+data->func_cnt; info++) {
if(info->id == desc->memid) { if(info->id == desc->memid || !strcmpW(info->name, name)) {
if(info->tid != tid) if(info->tid != tid) {
SysFreeString(name);
return; /* Duplicated in other interface */ return; /* Duplicated in other interface */
}
break; break;
} }
} }
@ -246,16 +253,15 @@ static void add_func_info(dispex_data_t *data, tid_t tid, const FUNCDESC *desc,
data->funcs = heap_realloc_zero(data->funcs, (data->func_size <<= 1)*sizeof(func_info_t)); data->funcs = heap_realloc_zero(data->funcs, (data->func_size <<= 1)*sizeof(func_info_t));
info = data->funcs+data->func_cnt; info = data->funcs+data->func_cnt;
hres = ITypeInfo_GetDocumentation(dti, desc->memid, &info->name, NULL, NULL, NULL);
if(FAILED(hres))
return;
data->func_cnt++; data->func_cnt++;
info->id = desc->memid; info->id = desc->memid;
info->name = name;
info->tid = tid; info->tid = tid;
info->func_disp_idx = -1; info->func_disp_idx = -1;
info->prop_vt = VT_EMPTY; info->prop_vt = VT_EMPTY;
}else {
SysFreeString(name);
} }
if(desc->invkind & DISPATCH_METHOD) { if(desc->invkind & DISPATCH_METHOD) {