diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index 4e9deb9f19b..479c98cec68 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -1189,35 +1189,36 @@ static HRESULT WINAPI domdoc_createProcessingInstruction( BSTR data, IXMLDOMProcessingInstruction** pi ) { -#ifdef HAVE_XMLNEWDOCPI - xmlNodePtr xmlnode; domdoc *This = impl_from_IXMLDOMDocument2( iface ); - xmlChar *xml_target, *xml_content; + IXMLDOMNode *node; + VARIANT type; + HRESULT hr; - TRACE("%p->(%s %s %p)\n", iface, debugstr_w(target), debugstr_w(data), pi); + TRACE("%p->(%s %s %p)\n", This, debugstr_w(target), debugstr_w(data), pi); - if(!pi) - return E_INVALIDARG; + if (!pi) return E_INVALIDARG; - if(!target || lstrlenW(target) == 0) - return E_FAIL; + *pi = NULL; - xml_target = xmlChar_from_wchar(target); - xml_content = xmlChar_from_wchar(data); + V_VT(&type) = VT_I1; + V_I1(&type) = NODE_PROCESSING_INSTRUCTION; - xmlnode = xmlNewDocPI(get_doc(This), xml_target, xml_content); - xmldoc_add_orphan(xmlnode->doc, xmlnode); - TRACE("created xmlptr %p\n", xmlnode); - *pi = (IXMLDOMProcessingInstruction*)create_pi(xmlnode); + hr = IXMLDOMDocument2_createNode(iface, type, target, NULL, &node); + if (hr == S_OK) + { + VARIANT v_data; - heap_free(xml_content); - heap_free(xml_target); + /* this is to bypass check in ::put_data() that blocks "