From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlattr.c | 21 +++++++++++++++------ dlls/mshtml/tests/dom.c | 10 +++++++++- 2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/htmlattr.c b/dlls/mshtml/htmlattr.c index ff6173aacdb..82d6aaf9476 100644 --- a/dlls/mshtml/htmlattr.c +++ b/dlls/mshtml/htmlattr.c @@ -344,17 +344,26 @@ static HRESULT WINAPI HTMLDOMAttribute2_cloneNode(IHTMLDOMAttribute2 *iface, VAR HTMLDOMAttribute *This = impl_from_IHTMLDOMAttribute2(iface); HTMLDOMAttribute *new_attr; HRESULT hres; + BSTR name;
TRACE("(%p)->(%x %p)\n", This, fDeep, clonedNode);
- hres = HTMLDOMAttribute_Create(This->name, NULL, 0, This->doc, &new_attr); - if(FAILED(hres)) - return hres; - - if(This->elem) + if(This->elem) { + hres = dispex_prop_name(&This->elem->node.event_target.dispex, This->dispid, &name); + if(FAILED(hres)) + return hres; + hres = HTMLDOMAttribute_Create(name, NULL, 0, This->doc, &new_attr); + SysFreeString(name); + if(FAILED(hres)) + return hres; hres = get_elem_attr_value_by_dispid(This->elem, This->dispid, &new_attr->value); - else + }else { + hres = HTMLDOMAttribute_Create(This->name, NULL, 0, This->doc, &new_attr); + if(FAILED(hres)) + return hres; hres = VariantCopy(&new_attr->value, &This->value); + } + if(FAILED(hres)) { IHTMLDOMAttribute_Release(&new_attr->IHTMLDOMAttribute_iface); return hres; diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index f0ac1053c40..9b52f7290c7 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -10093,9 +10093,9 @@ static void test_attr_node(IHTMLDOMAttribute *test_attr, IHTMLDocument2 *doc) IHTMLElement *elem; VARIANT_BOOL vbool; VARIANT v, v_clone; + BSTR bstr, bstr2; IDispatch *disp; HRESULT hres; - BSTR bstr; LONG type;
hres = IHTMLDOMAttribute_QueryInterface(test_attr, &IID_IHTMLDOMAttribute2, (void**)&attr); @@ -10127,6 +10127,14 @@ static void test_attr_node(IHTMLDOMAttribute *test_attr, IHTMLDocument2 *doc) ok(hres == S_OK, "cloneNode failed: %08lx\n", hres); ok(!iface_cmp((IUnknown*)attr, (IUnknown*)clone), "attr == cloned attr\n");
+ hres = IHTMLDOMAttribute_get_nodeName(test_attr, &bstr); + ok(hres == S_OK, "get_nodeName failed: %08lx\n", hres); + hres = IHTMLDOMAttribute_get_nodeName(clone, &bstr2); + ok(hres == S_OK, "get_nodeName failed: %08lx\n", hres); + ok(!wcscmp(bstr, bstr2), "attr name %s != cloned attr name %s\n", wine_dbgstr_w(bstr), wine_dbgstr_w(bstr2)); + SysFreeString(bstr2); + SysFreeString(bstr); + V_VT(&v) = VT_EMPTY; V_VT(&v_clone) = VT_EMPTY; hres = IHTMLDOMAttribute_get_nodeValue(test_attr, &v);