Nikolay Sivov : msxml3: Escape value for attribute in put_value().
Alexandre Julliard
julliard at winehq.org
Fri Mar 1 12:42:23 CST 2013
Module: wine
Branch: master
Commit: c9563be542a8bbdb918efcbb4270ba0fe54c854b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9563be542a8bbdb918efcbb4270ba0fe54c854b
Author: Nikolay Sivov <nsivov at 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=\""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();
More information about the wine-cvs
mailing list