[PATCH 1/5] winegstreamer: Fix multiple leaks in failure pathes.

Derek Lesho dlesho at codeweavers.com
Tue Sep 7 14:54:10 CDT 2021


On 9/6/21 1:37 PM, Nikolay Sivov wrote:

>
> On 9/6/21 8:23 PM, Zebediah Figura wrote:
>
> In addition to points Zebediah made.
>
>> @@ -1211,7 +1211,8 @@ static HRESULT WINAPI
>> media_source_Shutdown(IMFMediaSource *iface)
>>          source->state = SOURCE_SHUTDOWN;
>>    -    unix_funcs->wg_parser_disconnect(source->wg_parser);
>> +    if (source->stream_count)
>> +        unix_funcs->wg_parser_disconnect(source->wg_parser);
>>          if (source->read_thread)
> This is awkward because it implies some relationship between wg_parser
> being initialized and able to disconnect when stream_count is set. I
> think it's cleaner to let wg_parser_disconnect() handle null, or change
> condition to if (wg_parser).
The point here is that it's possible connection fails, in which case 
wg_parser is initialized but is not connected.  There is no case right 
now where stream_count is unset but the source is connected, so I opted 
to use it.  In the end, I will move this check into the constructor, as 
Zebediah suggested.
>
>>          unix_funcs->wg_parser_destroy(source->wg_parser);
>>    -    if (source->stream_count)
>> +    if (source->streams)
>>            free(source->streams);
> This should be redundant, no?
No, it is possible for calloc to fail, in which case stream_count is set 
but not the array.
>
>> @@ -1231,6 +1232,9 @@ static HRESULT WINAPI
>> media_source_Shutdown(IMFMediaSource *iface)
>>        {
>>            struct media_stream *stream = source->streams[i];
>>    +        if (!stream)
>> +            continue;
>> +
>>            stream->state = STREAM_SHUTDOWN;
> I think expected way would be to have steam_count consistent with a
> number of non-null streams, so you don't have to check for this.
So we should be modifying stream_count again in the failure path?  I 
don't agree that this is more clear but I will do so.
>



More information about the wine-devel mailing list