Nikolay Sivov : msxml3: Support VT_BSTR|VT_BYREF as reader input.
Module: wine Branch: master Commit: 2b4f20b8c3b6c98a2c3f2452d6498f94a47b7839 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2b4f20b8c3b6c98a2c3f2452d6... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Mar 3 08:54:52 2014 +0400 msxml3: Support VT_BSTR|VT_BYREF as reader input. --- dlls/msxml3/saxreader.c | 7 +++++-- dlls/msxml3/tests/saxreader.c | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index baabdd4..ea2b15f 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -2472,9 +2472,12 @@ static HRESULT internal_parse( switch(V_VT(&varInput)) { case VT_BSTR: - hr = internal_parseBuffer(This, (const char*)V_BSTR(&varInput), - strlenW(V_BSTR(&varInput))*sizeof(WCHAR), vbInterface); + case VT_BSTR|VT_BYREF: + { + BSTR str = V_ISBYREF(&varInput) ? *V_BSTRREF(&varInput) : V_BSTR(&varInput); + hr = internal_parseBuffer(This, (const char*)str, strlenW(str)*sizeof(WCHAR), vbInterface); break; + } case VT_ARRAY|VT_UI1: { void *pSAData; LONG lBound, uBound; diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index 05f6b91..bb3ea2a 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -2512,6 +2512,7 @@ static void test_saxreader_properties(void) ISAXXMLReader *reader; HRESULT hr; VARIANT v; + BSTR str; hr = CoCreateInstance(&CLSID_SAXXMLReader, NULL, CLSCTX_INPROC_SERVER, &IID_ISAXXMLReader, (void**)&reader); @@ -2659,6 +2660,13 @@ static void test_saxreader_properties(void) hr = ISAXXMLReader_parse(reader, v); EXPECT_HR(hr, S_OK); + /* VT_BSTR|VT_BYREF input type */ + str = _bstr_("<?xml version=\"1.0\"?><element></element>"); + V_VT(&v) = VT_BSTR|VT_BYREF; + V_BSTRREF(&v) = &str; + hr = ISAXXMLReader_parse(reader, v); + EXPECT_HR(hr, S_OK); + V_VT(&v) = VT_EMPTY; V_BSTR(&v) = (void*)0xdeadbeef; hr = ISAXXMLReader_getProperty(reader, _bstr_("xmldecl-version"), &v);
participants (1)
-
Alexandre Julliard