Daniel Lehman : msxml3: Don't QI for IPersistStream in internal_parse.

Alexandre Julliard julliard at winehq.org
Thu Mar 16 17:25:15 CDT 2017


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

Author: Daniel Lehman <dlehman at esri.com>
Date:   Wed Mar 15 09:38:30 2017 -0700

msxml3: Don't QI for IPersistStream in internal_parse.

Signed-off-by: Daniel Lehman <dlehman at esri.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msxml3/saxreader.c       | 32 ++++----------------------------
 dlls/msxml3/tests/saxreader.c |  2 ++
 2 files changed, 6 insertions(+), 28 deletions(-)

diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index 78cfe08..82241ad 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -2661,7 +2661,6 @@ static HRESULT internal_parse(
         }
         case VT_UNKNOWN:
         case VT_DISPATCH: {
-            IPersistStream *persistStream;
             ISequentialStream *stream = NULL;
             IXMLDOMDocument *xmlDoc;
 
@@ -2678,34 +2677,11 @@ static HRESULT internal_parse(
                 break;
             }
 
-            if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
-                        &IID_IPersistStream, (void**)&persistStream) == S_OK)
-            {
-                IStream *stream_copy;
-
-                hr = CreateStreamOnHGlobal(NULL, TRUE, &stream_copy);
-                if(hr != S_OK)
-                {
-                    IPersistStream_Release(persistStream);
-                    return hr;
-                }
-
-                hr = IPersistStream_Save(persistStream, stream_copy, TRUE);
-                IPersistStream_Release(persistStream);
-                if(hr == S_OK)
-                    IStream_QueryInterface(stream_copy, &IID_ISequentialStream, (void**)&stream);
-
-                IStream_Release(stream_copy);
-            }
-
             /* try base interface first */
-            if(!stream)
-            {
-                IUnknown_QueryInterface(V_UNKNOWN(&varInput), &IID_ISequentialStream, (void**)&stream);
-                if (!stream)
-                    /* this should never happen if IStream is implemented properly, but just in case */
-                    IUnknown_QueryInterface(V_UNKNOWN(&varInput), &IID_IStream, (void**)&stream);
-            }
+            IUnknown_QueryInterface(V_UNKNOWN(&varInput), &IID_ISequentialStream, (void**)&stream);
+            if (!stream)
+                /* this should never happen if IStream is implemented properly, but just in case */
+                IUnknown_QueryInterface(V_UNKNOWN(&varInput), &IID_IStream, (void**)&stream);
 
             if(stream)
             {
diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c
index 5fc62b7..cabca9d 100644
--- a/dlls/msxml3/tests/saxreader.c
+++ b/dlls/msxml3/tests/saxreader.c
@@ -1908,6 +1908,8 @@ static HRESULT WINAPI istream_QueryInterface(IStream *iface, REFIID riid, void *
 {
     *ppvObject = NULL;
 
+    ok(!IsEqualGUID(riid, &IID_IPersistStream), "Did not expect QI for IPersistStream\n");
+
     if(IsEqualGUID(riid, &IID_IStream) || IsEqualGUID(riid, &IID_IUnknown))
         *ppvObject = iface;
     else




More information about the wine-cvs mailing list