oleaut32/tests: initialize pointer before sending it over the wire??

Marcus Meissner marcus at jet.franken.de
Mon Jun 23 01:47:30 CDT 2008


On Fri, Jun 20, 2008 at 09:56:01PM -0700, Dan Kegel wrote:
> 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);

Not sure why, but I think it is unclear from the [out] tag where
the code starts allocating.

Perhaps in *widget, but perhaps it might just fill out **widget.

Not sure if IDL has a clear definition on when the [out] tag starts
to apply.

ciao, Marcus



More information about the wine-devel mailing list