From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/domdoc.c | 9 ++++++++- dlls/msxml3/tests/domdoc.c | 9 --------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index 41e2f0eec32..8602b78e917 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -1162,7 +1162,6 @@ static HRESULT WINAPI domdoc_createNode(IXMLDOMDocument3 *iface, VARIANT type, B /* Check if we need a name */ case NODE_ELEMENT: case NODE_ATTRIBUTE: - case NODE_ENTITY_REFERENCE: case NODE_PROCESSING_INSTRUCTION: if (!name || *name == 0) @@ -1180,6 +1179,14 @@ static HRESULT WINAPI domdoc_createNode(IXMLDOMDocument3 *iface, VARIANT type, B break; } + if (node_type == NODE_ENTITY_REFERENCE) + { + if (!name || !parser_is_valid_qualified_name(name) || wcschr(name, ':')) + return E_FAIL; + if (uri && *uri) + return E_FAIL; + } + *node = NULL; if (FAILED(hr = domnode_create(node_type, name, name ? wcslen(name) : 0, diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 8e96fbbedaf..8e8123c6226 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -17423,26 +17423,17 @@ static void test_entityref(void) V_VT(&v) = VT_I1; V_I1(&v) = NODE_ENTITY_REFERENCE; hr = IXMLDOMDocument_createNode(doc, v, _bstr_("p:name"), NULL, &node); - todo_wine ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) IXMLDOMNode_Release(node); hr = IXMLDOMDocument_createNode(doc, v, _bstr_("p:name"), _bstr_("uri"), &node); - todo_wine ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) IXMLDOMNode_Release(node); hr = IXMLDOMDocument_createNode(doc, v, _bstr_("name"), _bstr_("uri"), &node); - todo_wine ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) IXMLDOMNode_Release(node); hr = IXMLDOMDocument_createNode(doc, v, _bstr_("name"), _bstr_(""), &node); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); IXMLDOMNode_Release(node); hr = IXMLDOMDocument_createEntityReference(doc, _bstr_("p:ent"), &ref); - todo_wine ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) - IXMLDOMEntityReference_Release(ref); hr = IXMLDOMDocument_createEntityReference(doc, _bstr_("ent"), &ref); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10740