From: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> --- dlls/msxml3/domdoc.c | 32 +++++++++++--------------------- dlls/msxml3/tests/domdoc.c | 10 ++++++++++ dlls/msxml6/tests/domdoc.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 21 deletions(-) diff --git a/dlls/msxml3/domdoc.c b/dlls/msxml3/domdoc.c index c36c43256c0..9da10ac05a7 100644 --- a/dlls/msxml3/domdoc.c +++ b/dlls/msxml3/domdoc.c @@ -1808,33 +1808,22 @@ static HRESULT WINAPI domdoc_setProperty(IXMLDOMDocument3 *iface, BSTR p, VARIAN TRACE("%p, %s, %s.\n", iface, debugstr_w(p), debugstr_variant(&value)); - if (wcsicmp(p, L"SelectionLanguage") == 0) + if (!wcscmp(p, L"SelectionLanguage")) { - VARIANT varStr; - BSTR bstr; - - V_VT(&varStr) = VT_EMPTY; if (V_VT(&value) != VT_BSTR) - { - if (FAILED(hr = VariantChangeType(&varStr, &value, 0, VT_BSTR))) - return hr; - bstr = V_BSTR(&varStr); - } - else - bstr = V_BSTR(&value); + return E_FAIL; - hr = S_OK; - if (wcsicmp(bstr, L"XPath") == 0) + if (!wcscmp(V_BSTR(&value), L"XPath")) properties->XPath = TRUE; - else if (wcsicmp(bstr, L"XSLPattern") == 0) + else if (!wcscmp(V_BSTR(&value), L"XSLPattern")) properties->XPath = FALSE; else - hr = E_FAIL; + return E_FAIL; - VariantClear(&varStr); - return hr; + return S_OK; } - else if (!wcsicmp(p, L"SelectionNamespaces")) + + if (!wcsicmp(p, L"SelectionNamespaces")) { xmlChar *nsStr = (xmlChar *)properties->selectNsStr; struct list *pNsList; @@ -2008,13 +1997,14 @@ static HRESULT WINAPI domdoc_getProperty(IXMLDOMDocument3 *iface, BSTR p, VARIAN if (!var) return E_INVALIDARG; - if (!wcsicmp(p, L"SelectionLanguage")) + if (!wcscmp(p, L"SelectionLanguage")) { V_VT(var) = VT_BSTR; V_BSTR(var) = SysAllocString(properties->XPath ? L"XPath" : L"XSLPattern"); return V_BSTR(var) ? S_OK : E_OUTOFMEMORY; } - else if (!wcsicmp(p, L"SelectionNamespaces")) + + if (!wcsicmp(p, L"SelectionNamespaces")) { int lenA, lenW; BSTR rebuiltStr, cur; diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index f2b393c0979..52509fde1f2 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -4719,6 +4719,14 @@ static void test_IXMLDOMDocument2(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IXMLDOMDocument2_setProperty(doc2, _bstr_("SelectionLanguage"), _variantbstr_("XSLPattern")); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument2_setProperty(doc2, _bstr_("selectionLanguage"), _variantbstr_("XPath")); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + hr = IXMLDOMDocument2_setProperty(doc2, _bstr_("SelectionLanguage"), _variantbstr_("xPath")); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + V_VT(&var) = VT_UI4; + V_UI4(&var) = 2; + hr = IXMLDOMDocument2_setProperty(doc2, _bstr_("SelectionLanguage"), var); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); V_VT(&var) = VT_BSTR; V_BSTR(&var) = SysAllocString(L""); @@ -4737,6 +4745,8 @@ static void test_IXMLDOMDocument2(void) expect_eq(V_VT(&var), VT_BSTR, int, "%x"); ok(!wcscmp(V_BSTR(&var), L"XSLPattern"), "Unexpected value %s.\n", debugstr_w(V_BSTR(&var))); VariantClear(&var); + hr = IXMLDOMDocument2_getProperty(doc2, _bstr_("selectionLanguage"), &var); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); IXMLDOMDocument2_Release( doc2 ); IXMLDOMDocument_Release( doc ); diff --git a/dlls/msxml6/tests/domdoc.c b/dlls/msxml6/tests/domdoc.c index 80ad06fb8c5..ac45e90749e 100644 --- a/dlls/msxml6/tests/domdoc.c +++ b/dlls/msxml6/tests/domdoc.c @@ -736,6 +736,40 @@ todo_wine { free_bstrs(); } +static void test_selectionlanguage(void) +{ + IXMLDOMDocument2 *doc; + VARIANT var; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER, + &IID_IXMLDOMDocument2, (void **)&doc); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"SelectionLanguage"), &var); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(!wcscmp(V_BSTR(&var), L"XPath"), "Unexpected value %s.\n", debugstr_w(V_BSTR(&var))); + VariantClear(&var); + + hr = IXMLDOMDocument2_getProperty(doc, _bstr_(L"selectionLanguage"), &var); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + + V_BSTR(&var) = SysAllocString(L"XPath"); + V_VT(&var) = VT_BSTR; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"selectionLanguage"), var); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + VariantClear(&var); + + V_BSTR(&var) = SysAllocString(L"xPath"); + V_VT(&var) = VT_BSTR; + hr = IXMLDOMDocument2_setProperty(doc, _bstr_(L"SelectionLanguage"), var); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + VariantClear(&var); + + IXMLDOMDocument2_Release(doc); + free_bstrs(); +} + START_TEST(domdoc) { HRESULT hr; @@ -761,6 +795,7 @@ START_TEST(domdoc) test_prohibitdtd(); test_interfaces(); test_max_element_depth_values(); + test_selectionlanguage(); CoUninitialize(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10706