From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/tests/domdoc.c | 68 +++++++++++++++++++++++++++ dlls/msxml4/tests/domdoc.c | 21 +++++++++ dlls/msxml6/tests/domdoc.c | 95 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+) diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 4dc15f64674..abf6b0f5570 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -16894,6 +16894,73 @@ static void test_default_namespace(void) free_bstrs(); } +static void test_prohibitdtd(void) +{ + IXMLDOMDocument2 *doc, *doc2; + IXMLDOMNode *node; + HRESULT hr; + VARIANT v; + + hr = CoCreateInstance(&CLSID_DOMDocument30, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + ok(!V_BOOL(&v), "Unexpected value %d.\n", V_BOOL(&v)); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + V_VT(&v) = VT_I2; + V_I2(&v) = 123; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("ProhibitDTD"), v); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc, _bstr_("ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + todo_wine + ok(V_BOOL(&v) == VARIANT_TRUE, "Unexpected value %d.\n", V_BOOL(&v)); + + V_VT(&v) = VT_BOOL; + V_BOOL(&v) = VARIANT_TRUE; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_("ProhibitDTD"), v); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(szEmailXML), NULL); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_("<a/>"), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_cloneNode(doc, VARIANT_FALSE, &node); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMDocument2, (void **)&doc2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IXMLDOMNode_Release(node); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc2, _bstr_("ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + todo_wine + ok(V_BOOL(&v) == VARIANT_TRUE, "Unexpected value %d.\n", V_BOOL(&v)); + IXMLDOMDocument2_Release(doc2); + + IXMLDOMDocument2_Release(doc); +} + START_TEST(domdoc) { HRESULT hr; @@ -16999,6 +17066,7 @@ START_TEST(domdoc) test_setAttribute(); test_createElement(); test_default_namespace(); + test_prohibitdtd(); if (is_clsid_supported(&CLSID_MXNamespaceManager40, &IID_IMXNamespaceManager)) { diff --git a/dlls/msxml4/tests/domdoc.c b/dlls/msxml4/tests/domdoc.c index edcb82fa313..bf9ef504796 100644 --- a/dlls/msxml4/tests/domdoc.c +++ b/dlls/msxml4/tests/domdoc.c @@ -375,6 +375,26 @@ static void test_get_parentNode(void) IXMLDOMDocument_Release(doc); } +static void test_prohibitdtd(void) +{ + IXMLDOMDocument2 *doc; + HRESULT hr; + VARIANT v; + + hr = CoCreateInstance(&CLSID_DOMDocument40, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + ok(!V_BOOL(&v), "Unexpected value %d.\n", V_BOOL(&v)); + + IXMLDOMDocument2_Release(doc); +} + START_TEST(domdoc) { HRESULT hr; @@ -395,6 +415,7 @@ START_TEST(domdoc) test_create_attribute(); test_get_ownerDocument(); test_get_parentNode(); + test_prohibitdtd(); CoUninitialize(); } diff --git a/dlls/msxml6/tests/domdoc.c b/dlls/msxml6/tests/domdoc.c index 26aea60c3d2..6e556e55bb5 100644 --- a/dlls/msxml6/tests/domdoc.c +++ b/dlls/msxml6/tests/domdoc.c @@ -36,6 +36,39 @@ #include "wine/test.h" +static const WCHAR email_xml[] = +L"<?xml version=\"1.0\"?>" +"<!DOCTYPE email ["\ +" <!ELEMENT email (recipients,from,reply-to?,subject,body,attachment*)>"\ +" <!ATTLIST email attachments IDREFS #REQUIRED>"\ +" <!ATTLIST email sent (yes|no) \"no\">"\ +" <!ELEMENT recipients (to+,cc*)>"\ +" <!ELEMENT to (#PCDATA)>"\ +" <!ATTLIST to name CDATA #IMPLIED>"\ +" <!ELEMENT cc (#PCDATA)>"\ +" <!ATTLIST cc name CDATA #IMPLIED>"\ +" <!ELEMENT from (#PCDATA)>"\ +" <!ATTLIST from name CDATA #IMPLIED>"\ +" <!ELEMENT reply-to (#PCDATA)>"\ +" <!ATTLIST reply-to name CDATA #IMPLIED>"\ +" <!ELEMENT subject ANY>"\ +" <!ELEMENT body ANY>"\ +" <!ATTLIST body enc CDATA #FIXED \"UTF-8\">"\ +" <!ELEMENT attachment (#PCDATA)>"\ +" <!ATTLIST attachment id ID #REQUIRED>"\ +"]>" +"<email attachments=\"patch1\">" +" <recipients>" +" <to>wine-patches@winehq.org</to>" +" </recipients>" +" <from name=\"Anonymous\">user@localhost</from>" +" <subject>msxml3/tests: DTD validation (try 87)</subject>" +" <body>" +" It no longer causes spontaneous combustion..." +" </body>" +" <attachment id=\"patch1\">0001-msxml3-tests-DTD-validation.patch</attachment>" +"</email>"; + static BSTR alloced_bstrs[256]; static int alloced_bstrs_count; @@ -512,6 +545,67 @@ todo_wine { free_bstrs(); } +static void test_prohibitdtd(void) +{ + IXMLDOMDocument2 *doc, *doc2; + IXMLDOMNode *node; + HRESULT hr; + VARIANT v; + + hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + todo_wine + ok(V_BOOL(&v) == VARIANT_TRUE, "Unexpected value %d.\n", V_BOOL(&v)); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml), NULL); + todo_wine + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(L"<a/>"), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + V_VT(&v) = VT_I2; + V_I2(&v) = 0; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"ProhibitDTD"), v); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + ok(!V_BOOL(&v), "Unexpected value %d.\n", V_BOOL(&v)); + + hr = IXMLDOMDocument2_loadXML(doc, _bstr_(email_xml), NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_cloneNode(doc, VARIANT_FALSE, &node); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMDocument2, (void **)&doc2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IXMLDOMNode_Release(node); + + VariantInit(&v); + hr = IXMLDOMDocument2_getProperty(doc2, _bstr_(L"ProhibitDTD"), &v); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine + ok(V_VT(&v) == VT_BOOL, "Unexpected type %d.\n", V_VT(&v)); + ok(!V_BOOL(&v), "Unexpected value %d.\n", V_BOOL(&v)); + IXMLDOMDocument2_Release(doc2); + + IXMLDOMDocument2_Release(doc); +} + START_TEST(domdoc) { HRESULT hr; @@ -534,6 +628,7 @@ START_TEST(domdoc) test_get_ownerDocument(); test_get_parentNode(); test_normalize_attribute_values(); + test_prohibitdtd(); CoUninitialize(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10664