Skip to content

DecodeContext constructor tries to free the same context twice when it encounters an error #9

@SebDaMuffin

Description

@SebDaMuffin

If ffmpeg.avformat_alloc_context() encounters an error, ffmpeg frees the context. The next line then assigns the freed context to _formatContext. Then ffmpeg.avformat_open_input() returns an error, calling Dispose(), which then tries to free the already freed context, resulting in a crash. Delaying the _formatContext assignment until after FFMpegHelper.Verify() fixes this because Dispose() will not try to free _formatContext.

DecodeContext()

var formatContext = ffmpeg.avformat_alloc_context();
_formatContext = formatContext;
FFmpegHelper.Verify(ffmpeg.avformat_open_input(&formatContext, url, null, null), Dispose);

Dispose()

if (_formatContext != null)
{
ffmpeg.avformat_free_context(_formatContext);
_formatContext = null;
}

avformat_alloc_context()

https://github.com/FFmpeg/FFmpeg/blob/00b288da73f45acb78b74bcc40f73c7ba1fff7cb/libavformat/options.c#L187-L192

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions