Nikolay Sivov (@nsivov) commented about dlls/msxml3/element.c:
curr = xmlNewNsProp(NULL, NULL, ns->prefix, ns->href);
if (!curr)
{
return E_OUTOFMEMORY;
}
curr->doc = node->doc;
unk = create_attribute((xmlNodePtr)curr, TRUE);
if (!unk)
{
xmlFreeProp(curr);
return E_OUTOFMEMORY;
}
hr = IUnknown_QueryInterface(unk, &IID_IXMLDOMNode, (void**)item);
IUnknown_Release(unk);
return hr;
This doesn't look right. You are creating a new detached node every time. You can verify by getting this attribute, modifying its value, and then getting another reference from the same map. I'd expect updated value to be actually set in this case.