Module: wine Branch: master Commit: c9563be542a8bbdb918efcbb4270ba0fe54c854b URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9563be542a8bbdb918efcbb42...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Mar 1 00:09:25 2013 +0400
msxml3: Escape value for attribute in put_value().
---
dlls/msxml3/attribute.c | 2 +- dlls/msxml3/tests/domdoc.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletions(-)
diff --git a/dlls/msxml3/attribute.c b/dlls/msxml3/attribute.c index d461ce1..9ab3035 100644 --- a/dlls/msxml3/attribute.c +++ b/dlls/msxml3/attribute.c @@ -603,7 +603,7 @@ static HRESULT WINAPI domattr_put_value(
TRACE("(%p)->(%s)\n", This, debugstr_variant(&value));
- return node_put_value(&This->node, &value); + return node_put_value_escaped(&This->node, &value); }
static const struct IXMLDOMAttributeVtbl domattr_vtbl = diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 2ff78c2..c1bfc1a 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -8046,10 +8046,15 @@ static void test_put_nodeTypedValue(void) static void test_get_xml(void) { static const char xmlA[] = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n<a>test</a>\r\n"; + static const char attrA[] = "attr=""a & b"""; + static const char attr2A[] = ""a & b""; + static const char attr3A[] = "attr="&quot;a""; + static const char attr4A[] = ""a"; static const char fooA[] = "<foo/>"; IXMLDOMProcessingInstruction *pi; IXMLDOMNode *first; IXMLDOMElement *elem = NULL; + IXMLDOMAttribute *attr; IXMLDOMDocument *doc; VARIANT_BOOL b; VARIANT v; @@ -8105,6 +8110,51 @@ static void test_get_xml(void) SysFreeString(xml);
IXMLDOMElement_Release(elem); + + /* attribute node */ + hr = IXMLDOMDocument_createAttribute(doc, _bstr_("attr"), &attr); + ok(hr == S_OK, "got 0x%08x\n", hr); + + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = _bstr_(""a & b""); + hr = IXMLDOMAttribute_put_value(attr, v); + ok(hr == S_OK, "got 0x%08x\n", hr); + + xml = NULL; + hr = IXMLDOMAttribute_get_xml(attr, &xml); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(!memcmp(xml, _bstr_(attrA), (sizeof(attrA)-1)*sizeof(WCHAR)), "got %s\n", wine_dbgstr_w(xml)); + SysFreeString(xml); + + VariantInit(&v); + hr = IXMLDOMAttribute_get_value(attr, &v); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(V_VT(&v) == VT_BSTR, "got type %d\n", V_VT(&v)); + ok(!memcmp(V_BSTR(&v), _bstr_(attr2A), (sizeof(attr2A)-1)*sizeof(WCHAR)), + "got %s\n", wine_dbgstr_w(V_BSTR(&v))); + VariantClear(&v); + + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = _bstr_(""a"); + hr = IXMLDOMAttribute_put_value(attr, v); + ok(hr == S_OK, "got 0x%08x\n", hr); + + xml = NULL; + hr = IXMLDOMAttribute_get_xml(attr, &xml); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(!memcmp(xml, _bstr_(attr3A), (sizeof(attr3A)-1)*sizeof(WCHAR)), "got %s\n", wine_dbgstr_w(xml)); + SysFreeString(xml); + + VariantInit(&v); + hr = IXMLDOMAttribute_get_value(attr, &v); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(V_VT(&v) == VT_BSTR, "got type %d\n", V_VT(&v)); + ok(!memcmp(V_BSTR(&v), _bstr_(attr4A), (sizeof(attr4A)-1)*sizeof(WCHAR)), + "got %s\n", wine_dbgstr_w(V_BSTR(&v))); + VariantClear(&v); + + IXMLDOMAttribute_Release(attr); + IXMLDOMDocument_Release(doc);
free_bstrs();