Alistair Leslie-Hughes : msxml3: lastChild not supported for CDATASection, Comment, PI and Text Nodes.

Alexandre Julliard julliard at winehq.org
Wed Jan 9 07:02:08 CST 2008


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

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Tue Jan  8 10:28:57 2008 +1100

msxml3: lastChild not supported for CDATASection, Comment, PI and Text Nodes.

---

 dlls/msxml3/node.c         |   19 ++++++++++++++++++-
 dlls/msxml3/tests/domdoc.c |   23 +++++++++++++++++++++++
 2 files changed, 41 insertions(+), 1 deletions(-)

diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index 9b4c4f0..dae9130 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -334,7 +334,24 @@ static HRESULT WINAPI xmlnode_get_lastChild(
     IXMLDOMNode** lastChild)
 {
     xmlnode *This = impl_from_IXMLDOMNode( iface );
-    return get_node( This, "lastChild", This->node->last, lastChild );
+
+    TRACE("%p\n", This );
+
+    if (!lastChild)
+        return E_INVALIDARG;
+
+    switch( This->node->type )
+    {
+    /* CDATASection, Comment, PI and Text Nodes do not support lastChild */
+    case XML_TEXT_NODE:
+    case XML_CDATA_SECTION_NODE:
+    case XML_PI_NODE:
+    case XML_COMMENT_NODE:
+        *lastChild = NULL;
+        return S_FALSE;
+    default:
+        return get_node( This, "lastChild", This->node->last, lastChild );
+    }
 }
 
 static HRESULT WINAPI xmlnode_get_previousSibling(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 777a815..272dfb6 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -347,6 +347,7 @@ static void test_domdoc( void )
     IXMLDOMText *nodetext = NULL;
     IXMLDOMComment *node_comment = NULL;
     IXMLDOMAttribute *node_attr = NULL;
+    IXMLDOMNode *nodeChild = NULL;
     VARIANT_BOOL b;
     VARIANT var;
     BSTR str;
@@ -508,6 +509,17 @@ static void test_domdoc( void )
     ok( r == E_INVALIDARG, "returns %08x\n", r );
     r = IXMLDOMDocument_createTextNode(doc, str, &nodetext);
     ok( r == S_OK, "returns %08x\n", r );
+    if(nodetext)
+    {
+        /* Text Last Child Checks */
+        r = IXMLDOMText_get_lastChild(nodetext, NULL);
+        ok(r == E_INVALIDARG, "ret %08x\n", r );
+
+        nodeChild = (IXMLDOMNode*)0x1;
+        r = IXMLDOMText_get_lastChild(nodetext, &nodeChild);
+        ok(r == S_FALSE, "ret %08x\n", r );
+        ok(nodeChild == NULL, "nodeChild not NULL\n");
+    }
     IXMLDOMText_Release( nodetext );
     SysFreeString( str );
 
@@ -516,6 +528,17 @@ static void test_domdoc( void )
     ok( r == E_INVALIDARG, "returns %08x\n", r );
     r = IXMLDOMDocument_createComment(doc, szComment, &node_comment);
     ok( r == S_OK, "returns %08x\n", r );
+    if(node_comment)
+    {
+        /* Last Child Checks */
+        r = IXMLDOMComment_get_lastChild(node_comment, NULL);
+        ok(r == E_INVALIDARG, "ret %08x\n", r );
+
+        nodeChild = (IXMLDOMNode*)0x1;
+        r = IXMLDOMComment_get_lastChild(node_comment, &nodeChild);
+        ok(r == S_FALSE, "ret %08x\n", r );
+        ok(nodeChild == NULL, "pLastChild not NULL\n");
+    }
     IXMLDOMText_Release( node_comment );
 
     /* test Create Attribute */




More information about the wine-cvs mailing list