Robert Shearman : ole32: Always rewind the stream in StdGlobalInterfaceTable_GetInterfaceFromGlobal

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jun 15 07:12:32 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: f2dc25a5f328bc6aafd5776b45f4d233ad2baf46
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=f2dc25a5f328bc6aafd5776b45f4d233ad2baf46

Author: Robert Shearman <rob at codeweavers.com>
Date:   Wed Jun 14 13:20:14 2006 +0100

ole32: Always rewind the stream in StdGlobalInterfaceTable_GetInterfaceFromGlobal
as CoUnmarshalInterface may have advanced the stream, even if it failed.

---

 dlls/ole32/git.c           |    9 +++++----
 dlls/ole32/tests/marshal.c |    2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/dlls/ole32/git.c b/dlls/ole32/git.c
index cb36be3..872df65 100644
--- a/dlls/ole32/git.c
+++ b/dlls/ole32/git.c
@@ -298,16 +298,17 @@ StdGlobalInterfaceTable_GetInterfaceFrom
   
   /* unmarshal the interface */
   hres = CoUnmarshalInterface(entry->stream, riid, ppv);
-  if (hres) {
-    WARN("Failed to unmarshal stream\n");
-    return hres;
-  }
   
   /* rewind stream, in case it's used again */
   move.u.LowPart = 0;
   move.u.HighPart = 0;
   IStream_Seek(entry->stream, move, STREAM_SEEK_SET, NULL);
 
+  if (hres) {
+    WARN("Failed to unmarshal stream\n");
+    return hres;
+  }
+
   /* addref it */
   lpUnk = *ppv;
   IUnknown_AddRef(lpUnk);
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 32e2d93..a1be2c3 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -1978,7 +1978,7 @@ static DWORD CALLBACK get_global_interfa
 
 	CoInitialize(NULL);
 	hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(params->git, params->cookie, &IID_IClassFactory, (void **)&cf);
-	todo_wine ok_ole_success(hr, IGlobalInterfaceTable_GetInterfaceFromGlobal);
+	ok_ole_success(hr, IGlobalInterfaceTable_GetInterfaceFromGlobal);
 	CoUninitialize();
 
 	return hr;




More information about the wine-cvs mailing list