From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/dispex.c | 8 ++++++++ dlls/mshtml/tests/documentmode.js | 4 ++++ 2 files changed, 12 insertions(+)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 111f3377ff9..b7284c8b935 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2007,6 +2007,14 @@ BOOL dispex_builtin_is_noattr(DispatchEx *dispex, DISPID id) hres = get_builtin_func(dispex->info, id, &func); assert(SUCCEEDED(hres));
+ if(func->func_disp_idx >= 0 && dispex->dynamic_data && dispex->dynamic_data->func_disps) { + func_obj_entry_t *entry = dispex->dynamic_data->func_disps + func->func_disp_idx; + + if(entry->func_obj && (V_VT(&entry->val) != VT_DISPATCH || + V_DISPATCH(&entry->val) != (IDispatch*)&entry->func_obj->dispex.IWineJSDispatchHost_iface)) + return FALSE; + } + return func->noattr; }
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 13772b52606..f6d61ec01d4 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -642,6 +642,7 @@ sync_test("attr_props", function() {
elem.setAttribute("test", "wine"); elem.setAttribute("z-index", "foobar"); + elem.setAttribute("removeAttribute", "funcattr");
attr = elem.getAttributeNode("test"); test_attr(true, true); @@ -649,6 +650,9 @@ sync_test("attr_props", function() { attr = elem.getAttributeNode("z-index"); test_attr(true, true);
+ attr = elem.getAttributeNode("removeAttribute"); + ok(attr !== null, "removeAttribute attr = null"); + attr = elem.getAttributeNode("tabIndex"); if(v < 8) test_attr(false, false);