Alistair Leslie-Hughes : msxml3: Cannot use put_nodeValue on a IXMLDOMProcessingInstruction node whose target is xml .

Alexandre Julliard julliard at winehq.org
Thu Mar 13 14:55:24 CDT 2008


Module: wine
Branch: master
Commit: 52f6a33a85df3fbc1796de208f1cf24feff91ad8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=52f6a33a85df3fbc1796de208f1cf24feff91ad8

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Thu Mar 13 20:30:12 2008 +1100

msxml3: Cannot use put_nodeValue on a IXMLDOMProcessingInstruction node whose target is xml.

---

 dlls/msxml3/pi.c           |   19 +++++++++++++++++++
 dlls/msxml3/tests/domdoc.c |    7 +++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/dlls/msxml3/pi.c b/dlls/msxml3/pi.c
index 44e8a8b..5fad22c 100644
--- a/dlls/msxml3/pi.c
+++ b/dlls/msxml3/pi.c
@@ -200,6 +200,25 @@ static HRESULT WINAPI dom_pi_put_nodeValue(
     VARIANT var1 )
 {
     dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
+    BSTR sTarget;
+    static WCHAR szXML[] = {'x','m','l',0};
+    HRESULT hr;
+
+    TRACE("%p\n", This );
+
+    /* Cannot set data to a PI node whos target is 'xml' */
+    hr = dom_pi_get_nodeName(iface, &sTarget);
+    if(hr == S_OK)
+    {
+        if(lstrcmpW( sTarget, szXML) == 0)
+        {
+            SysFreeString(sTarget);
+            return E_FAIL;
+        }
+
+        SysFreeString(sTarget);
+    }
+
     return IXMLDOMNode_put_nodeValue( This->node, var1 );
 }
 
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index b597670..884c133 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -786,6 +786,13 @@ static void test_domdoc( void )
         r = IXMLDOMProcessingInstruction_put_data(nodePI, _bstr_("version=\"1.0\" encoding=\"UTF-8\""));
         ok(r == E_FAIL, "ret %08x\n", r );
 
+        /* test put_data */
+        V_VT(&var) = VT_BSTR;
+        V_BSTR(&var) = SysAllocString(szOpen);  /* Doesnt matter what the string is, cannot set an xml node. */
+        r = IXMLDOMProcessingInstruction_put_nodeValue(nodePI, var);
+        ok(r == E_FAIL, "ret %08x\n", r );
+        VariantClear(&var);
+
         /* test get nodeName */
         r = IXMLDOMProcessingInstruction_get_nodeName(nodePI, &str);
         ok( !lstrcmpW( str, _bstr_("xml") ), "incorrect nodeName string\n");




More information about the wine-cvs mailing list