From: lucas persson <luben93@gmail.com> Windows MSXML (DOMDocument30) rejects documents with embedded <?xml?> declarations inside elements, returning S_FALSE from loadXML. Wine's patched libxml2 intentionally tolerates these for app compatibility. Use broken() to accept both behaviors in tests, and skip DOM structure validation when the document fails to load on Windows. --- dlls/msxml3/tests/domdoc.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index a0b465f9bca..555f8bfab42 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -14485,8 +14485,8 @@ static void test_embedded_xml_declaration(void) DOMNodeType type; /* Test XML with embedded <?xml?> declaration inside an element. - * Windows MSXML tolerates this - the embedded <?xml?> becomes a PI node - * and subsequent content is parsed normally. */ + * Windows MSXML rejects these (loadXML returns S_FALSE), but Wine's + * patched libxml2 tolerates them and parses the content normally. */ static const char embedded_xml_str[] = "<?xml version=\"1.0\"?>" "<root>" @@ -14554,12 +14554,13 @@ static void test_embedded_xml_declaration(void) } /* Test 2: XML with embedded <?xml?> declaration inside an element. - * The document should load and the <xmldata> element should have - * a PI node and a <nested> child element. */ + * Windows MSXML rejects this (S_FALSE), Wine tolerates it via libs/xml2 patch. */ b = VARIANT_FALSE; hr = IXMLDOMDocument_loadXML(doc, _bstr_(embedded_xml_str), &b); - ok(hr == S_OK, "loadXML with embedded XML declaration failed: %#lx\n", hr); - ok(b == VARIANT_TRUE, "failed to load XML with embedded declaration\n"); + ok(hr == S_OK || broken(hr == S_FALSE) /* Windows MSXML rejects embedded <?xml?> */, + "loadXML with embedded XML declaration returned: %#lx\n", hr); + ok(b == VARIANT_TRUE || broken(b == VARIANT_FALSE), + "unexpected load result for embedded declaration: %d\n", b); if (b == VARIANT_TRUE) { @@ -14638,8 +14639,10 @@ static void test_embedded_xml_declaration(void) /* Test 3: Multiple embedded declarations in different elements */ b = VARIANT_FALSE; hr = IXMLDOMDocument_loadXML(doc, _bstr_(multi_embedded_str), &b); - ok(hr == S_OK, "loadXML with multiple embedded declarations failed: %#lx\n", hr); - ok(b == VARIANT_TRUE, "failed to load XML with multiple embedded declarations\n"); + ok(hr == S_OK || broken(hr == S_FALSE) /* Windows MSXML rejects embedded <?xml?> */, + "loadXML with multiple embedded declarations returned: %#lx\n", hr); + ok(b == VARIANT_TRUE || broken(b == VARIANT_FALSE), + "unexpected load result for multiple embedded declarations: %d\n", b); if (b == VARIANT_TRUE) { @@ -14698,8 +14701,10 @@ static void test_embedded_xml_declaration(void) /* Test 4: Embedded declaration with encoding attribute */ b = VARIANT_FALSE; hr = IXMLDOMDocument_loadXML(doc, _bstr_(embedded_with_encoding_str), &b); - ok(hr == S_OK, "loadXML with embedded encoding declaration failed: %#lx\n", hr); - ok(b == VARIANT_TRUE, "failed to load XML with embedded encoding declaration\n"); + ok(hr == S_OK || broken(hr == S_FALSE) /* Windows MSXML rejects embedded <?xml?> */, + "loadXML with embedded encoding declaration returned: %#lx\n", hr); + ok(b == VARIANT_TRUE || broken(b == VARIANT_FALSE), + "unexpected load result for embedded encoding declaration: %d\n", b); if (b == VARIANT_TRUE) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10225