Module: wine Branch: refs/heads/master Commit: f2dc25a5f328bc6aafd5776b45f4d233ad2baf46 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f2dc25a5f328bc6aafd5776b...
Author: Robert Shearman rob@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;