[PATCH] dmime: Parse Wave track stream

Nikolay Sivov nsivov at codeweavers.com
Tue May 5 08:35:35 CDT 2020


On 5/5/20 3:36 PM, Alistair Leslie-Hughes wrote:
> @@ -81,6 +90,19 @@ static ULONG WINAPI wave_track_Release(IDirectMusicTrack8 *iface)
>       TRACE("(%p) ref=%d\n", This, ref);
>   
>       if (!ref) {
> +        struct list *cursor, *cursor2;
> +        struct DMUS_PRIVATE_WAVE_ITEM *item;
> +
> +        LIST_FOR_EACH_SAFE(cursor, cursor2, &This->items) {
> +            item = LIST_ENTRY(cursor, struct DMUS_PRIVATE_WAVE_ITEM, entry);
> +            list_remove(cursor);
> +
> +            if (item->object)
> +                IDirectMusicObject_Release(item->object);
> +
> +            heap_free(item);
> +        }
> +
>           HeapFree(GetProcessHeap(), 0, This);
>           DMIME_UnlockModule();
>       }
LIST_FOR_EACH_ENTRY_SAFE() will make this shorter.

> +    hr = IStream_QueryInterface (stream, &IID_IDirectMusicGetLoader, (void**)&getloader);
> +    if (FAILED(hr))
> +        return hr;
> +
> +    hr = IDirectMusicGetLoader_GetLoader (getloader, &loader);
> +    if (FAILED(hr))
> +        return hr;
> +    IDirectMusicGetLoader_Release (getloader);
> +
> +    hr = IDirectMusicLoader_GetObject (loader, &description, &IID_IDirectMusicObject, (void**)&object);
> +    IDirectMusicLoader_Release (loader);
> +
> +    return SUCCEEDED(hr) ? S_OK : hr;
This leaks 'getloader' on failure. Does this really work though? I 
should probably be GetObject((void**)object)?



More information about the wine-devel mailing list