Module: wine Branch: master Commit: f31cd30841f36c733e48c9167b64b632aa65a0d4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f31cd30841f36c733e48c9167b...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Tue Jan 8 11:07:12 2008 +1100
msxml3: createProcessingInstruction: Check arguments are valid.
---
dlls/msxml3/domdoc.c | 6 ++++++ dlls/msxml3/tests/domdoc.c | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index d955926..60a65d0 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -958,6 +958,12 @@ static HRESULT WINAPI domdoc_createProcessingInstruction(
TRACE("%p->(%s %s %p)\n", iface, debugstr_w(target), debugstr_w(data), pi);
+ if(!pi) + return E_INVALIDARG; + + if(!target || lstrlenW(target) == 0) + return E_FAIL; + xml_target = xmlChar_from_wchar((WCHAR*)target); xml_content = xmlChar_from_wchar((WCHAR*)data);
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 272dfb6..910c044 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -348,6 +348,7 @@ static void test_domdoc( void ) IXMLDOMComment *node_comment = NULL; IXMLDOMAttribute *node_attr = NULL; IXMLDOMNode *nodeChild = NULL; + IXMLDOMProcessingInstruction *nodePI = NULL; VARIANT_BOOL b; VARIANT var; BSTR str; @@ -548,6 +549,31 @@ static void test_domdoc( void ) ok( r == S_OK, "returns %08x\n", r ); IXMLDOMText_Release( node_attr);
+ /* test Processing Instruction */ + str = SysAllocStringLen(NULL, 0); + r = IXMLDOMDocument_createProcessingInstruction(doc, str, str, NULL); + ok( r == E_INVALIDARG, "returns %08x\n", r ); + r = IXMLDOMDocument_createProcessingInstruction(doc, NULL, str, &nodePI); + ok( r == E_FAIL, "returns %08x\n", r ); + r = IXMLDOMDocument_createProcessingInstruction(doc, str, str, &nodePI); + ok( r == E_FAIL, "returns %08x\n", r ); + SysFreeString(str); + + r = IXMLDOMDocument_createProcessingInstruction(doc, _bstr_("xml"), _bstr_("version="1.0""), &nodePI); + ok( r == S_OK, "returns %08x\n", r ); + if(nodePI) + { + /* Last Child Checks */ + r = IXMLDOMProcessingInstruction_get_lastChild(nodePI, NULL); + ok(r == E_INVALIDARG, "ret %08x\n", r ); + + nodeChild = (IXMLDOMNode*)0x1; + r = IXMLDOMProcessingInstruction_get_lastChild(nodePI, &nodeChild); + ok(r == S_FALSE, "ret %08x\n", r ); + ok(nodeChild == NULL, "nodeChild not NULL\n"); + } + IXMLDOMProcessingInstruction_Release(nodePI); + r = IXMLDOMDocument_Release( doc ); ok( r == 0, "document ref count incorrect\n");