Nikolay Sivov : msxml3: Support VT_BSTR|VT_BYREF as reader input.

Alexandre Julliard julliard at winehq.org
Mon Mar 3 13:20:10 CST 2014


Module: wine
Branch: master
Commit: 2b4f20b8c3b6c98a2c3f2452d6498f94a47b7839
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2b4f20b8c3b6c98a2c3f2452d6498f94a47b7839

Author: Nikolay Sivov <nsivov at 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);




More information about the wine-cvs mailing list