msxml3: Escape value for attribute in put_value().

This commit is contained in:
Nikolay Sivov 2013-03-01 00:09:25 +04:00 committed by Alexandre Julliard
parent a935a44b44
commit c9563be542
2 changed files with 51 additions and 1 deletions

View file

@ -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 =

View file

@ -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=\"&quot;a &amp; b&quot;\"";
static const char attr2A[] = "\"a & b\"";
static const char attr3A[] = "attr=\"&amp;quot;a\"";
static const char attr4A[] = "&quot;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_("&quot;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();