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);
 


Reply via email to