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