While looking at the valgrind warning in http://kegel.com/wine/valgrind/logs-2008-06-20/vg-oleaut32_tmarshal.txt
Conditional jump or move depends on uninitialised value(s) at serialize_param (tmarshal.c:736) by serialize_param (tmarshal.c:744) by xCall (tmarshal.c:1414) by ??? by func_tmarshal (tmarshal.c:1179) by run_test (test.h:449) by main (test.h:498) Uninitialised value was created by a stack allocation at test_typelibmarshal (tmarshal.c:762) The problem happens during a call to this method where widget is a pointer to an uninitialized pointer which will receive the pointer to the widget: interface IKindaEnumWidget : IUnknown { HRESULT Next( [out] IWidget **widget); I discovered that the attached patch prevented the problem. I don't quite understand why; at first glance, widget is an out parameter from the function, why would it be dereferenced while serializing the call?
diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c index 3812b72..b1ade9b 100644 --- a/dlls/oleaut32/tests/tmarshal.c +++ b/dlls/oleaut32/tests/tmarshal.c @@ -792,6 +792,7 @@ static void test_typelibmarshal(void) ok_ole_success(hr, CoUnmarshalInterface); IStream_Release(pStream); + pWidget = NULL; hr = IKindaEnumWidget_Next(pKEW, &pWidget); ok_ole_success(hr, IKindaEnumWidget_Next);