[PATCH 2/4] Fix IXMLDOMNode::get_prefix() for empty prefix
Nikolay Sivov
nsivov at codeweavers.com
Tue Sep 14 00:00:02 CDT 2010
---
dlls/msxml3/node.c | 16 ++++++-------
dlls/msxml3/tests/domdoc.c | 51 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 56 insertions(+), 11 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index e059d77..7e91292 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -1429,8 +1429,7 @@ static HRESULT WINAPI xmlnode_get_prefix(
BSTR* prefixString)
{
xmlnode *This = impl_from_IXMLDOMNode( iface );
- HRESULT hr = S_FALSE;
- xmlNsPtr *pNSList;
+ xmlNsPtr *ns;
TRACE("(%p)->(%p)\n", This, prefixString );
@@ -1439,16 +1438,15 @@ static HRESULT WINAPI xmlnode_get_prefix(
*prefixString = NULL;
- pNSList = xmlGetNsList(This->node->doc, This->node);
- if(pNSList)
+ if ((ns = xmlGetNsList(This->node->doc, This->node)))
{
- *prefixString = bstr_from_xmlChar( pNSList[0]->prefix );
-
- xmlFree(pNSList);
- hr = S_OK;
+ if (ns[0]->prefix) *prefixString = bstr_from_xmlChar( ns[0]->prefix );
+ xmlFree(ns);
}
- return hr;
+ TRACE("prefix %s\n", debugstr_w(*prefixString));
+
+ return *prefixString ? S_OK : S_FALSE;
}
static HRESULT WINAPI xmlnode_get_baseName(
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index f65eff7..176ff36 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -6103,8 +6103,8 @@ static void test_createNode(void)
ok( hr == S_OK, "got 0x%08x\n", hr);
prefix = (void*)0xdeadbeef;
hr = IXMLDOMNode_get_prefix(node, &prefix);
- todo_wine ok( hr == S_FALSE, "got 0x%08x\n", hr);
- todo_wine ok(prefix == 0, "expected empty prefix, got %p\n", prefix);
+ ok( hr == S_FALSE, "got 0x%08x\n", hr);
+ ok(prefix == 0, "expected empty prefix, got %p\n", prefix);
hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMElement, (void**)&elem);
ok( hr == S_OK, "got 0x%08x\n", hr);
@@ -6118,6 +6118,7 @@ static void test_createNode(void)
hr = IXMLDOMElement_get_namespaceURI(elem, &str);
ok( hr == S_OK, "got 0x%08x\n", hr);
ok( lstrcmpW(str, _bstr_("http://winehq.org/default")) == 0, "expected default namespace\n");
+ SysFreeString(str);
IXMLDOMElement_Release(elem);
IXMLDOMNode_Release(node);
@@ -6126,6 +6127,51 @@ static void test_createNode(void)
free_bstrs();
}
+static void test_get_prefix(void)
+{
+ IXMLDOMDocument *doc;
+ IXMLDOMElement *element;
+ HRESULT hr;
+ BSTR str;
+
+ doc = create_document(&IID_IXMLDOMDocument);
+ if (!doc) return;
+
+ /* no prefix */
+ hr = IXMLDOMDocument_createElement(doc, _bstr_("elem"), &element);
+ ok( hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IXMLDOMElement_get_prefix(element, NULL);
+ ok( hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+ str = (void*)0xdeadbeef;
+ hr = IXMLDOMElement_get_prefix(element, &str);
+ ok( hr == S_FALSE, "got 0x%08x\n", hr);
+ ok( str == 0, "got %p\n", str);
+
+ IXMLDOMElement_Release(element);
+
+ /* with prefix */
+ hr = IXMLDOMDocument_createElement(doc, _bstr_("a:elem"), &element);
+ ok( hr == S_OK, "got 0x%08x\n", hr);
+
+ str = (void*)0xdeadbeef;
+ hr = IXMLDOMElement_get_prefix(element, &str);
+ ok( hr == S_OK, "got 0x%08x\n", hr);
+ ok( lstrcmpW(str, _bstr_("a")) == 0, "expected prefix \"a\"\n");
+ SysFreeString(str);
+
+ str = (void*)0xdeadbeef;
+ hr = IXMLDOMElement_get_namespaceURI(element, &str);
+ todo_wine ok( hr == S_FALSE, "got 0x%08x\n", hr);
+ todo_wine ok( str == 0, "got %p\n", str);
+
+ IXMLDOMElement_Release(element);
+
+ IXMLDOMDocument_Release(doc);
+ free_bstrs();
+}
+
START_TEST(domdoc)
{
IXMLDOMDocument *doc;
@@ -6182,6 +6228,7 @@ START_TEST(domdoc)
test_setAttributeNode();
test_put_dataType();
test_createNode();
+ test_get_prefix();
CoUninitialize();
}
--
1.5.6.5
--------------080400000702000603020905--
More information about the wine-patches
mailing list