From 91ad27ea25c5714173688478a605e09ccb95e361 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 8 Jan 2008 10:28:57 +1100 Subject: [PATCH] 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 deletion(-) diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 9b4c4f0f06c..dae91307e97 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 777a815a852..272dfb6f352 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 */ -- 2.11.4.GIT