[FFmpeg-devel] [PATCH] avformat/utils: fix crashes in has_decode_delay_been_guessed
wm4
nfxjfg at googlemail.com
Fri Dec 2 15:03:53 EET 2016
On Fri, 2 Dec 2016 13:51:24 +0100
Timo Rothenpieler <timo at rothenpieler.org> wrote:
> These paths can be taken when the actual underlying codec is not h264,
> but the user forces, for example via ffmpeg command line, a specific
> input decoder that happens to be a h264 decoder.
>
> In that case, the codecpar codec_id is set to h264, but the internal
> avctx is the one of, for example, an mpeg2 decoder, thus crashing in
> this function.
>
> Checking for the codec actually being h264 is not strictly neccesary to
> fix the crash, but a precaution to catch potential other unexpected
> codepaths.
>
> Fixes #5985
> ---
> libavformat/utils.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 345bbfe5fe..8e23c0c6ec 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -966,11 +966,14 @@ static int is_intra_only(enum AVCodecID id)
>
> static int has_decode_delay_been_guessed(AVStream *st)
> {
> - if (st->codecpar->codec_id != AV_CODEC_ID_H264) return 1;
> + if (st->codecpar->codec_id != AV_CODEC_ID_H264 ||
> + st->internal->avctx->codec_id != AV_CODEC_ID_H264)
> + return 1;
> if (!st->info) // if we have left find_stream_info then nb_decoded_frames won't increase anymore for stream copy
> return 1;
> #if CONFIG_H264_DECODER
> - if (st->internal->avctx->has_b_frames &&
> + if (st->internal->avctx->codec && !strcmp(st->internal->avctx->codec->name, "h264") &&
> + st->internal->avctx->has_b_frames &&
> avpriv_h264_has_num_reorder_frames(st->internal->avctx) == st->internal->avctx->has_b_frames)
> return 1;
> #endif
That looks ok, but: can someone explain to me why Libav does apparently
not need this shitshow?
More information about the ffmpeg-devel
mailing list