[PATCH] mp3dmod: Support COM aggregation.

Jacek Caban jacek at codeweavers.com
Fri Jun 22 13:22:10 CDT 2018


Hi Zebediah,

On 06/22/2018 08:06 PM, Zebediah Figura wrote:
> -static HRESULT create_mp3_decoder(REFIID iid, void **obj)
> +static HRESULT create_mp3_decoder(IUnknown *outer, REFIID iid, void **obj)
>  {
>      struct mp3_decoder *This;
>      int err;
> @@ -424,15 +457,17 @@ static HRESULT create_mp3_decoder(REFIID iid, void **obj)
>      if (!(This = heap_alloc_zero(sizeof(*This))))
>          return E_OUTOFMEMORY;
>  
> -    This->IMediaObject_iface.lpVtbl = &IMediaObject_vtbl;
> +    This->IUnknown_inner.lpVtbl = &Unknown_vtbl;
> +    This->IMediaObject_iface.lpVtbl = &MediaObject_vtbl;
>      This->ref = 0;
> +    This->outer = outer ? outer : &This->IUnknown_inner;
>  
>      mpg123_init();
>      This->mh = mpg123_new(NULL, &err);
>      mpg123_open_feed(This->mh);
>      mpg123_format_none(This->mh);
>  
> -    return IMediaObject_QueryInterface(&This->IMediaObject_iface, iid, obj);
> +    return IUnknown_QueryInterface(&This->IUnknown_inner, iid, obj);


This leaks in non-aggregated case if QueryInterface fails.


Jacek




More information about the wine-devel mailing list