Yu Yang:
> If 'opts' could not be allocated, exiting the program to avoid crash when
> release it.
> Before setup_find_stream_info_opts(), checking 'orig_nb_streams' is > 0.
>
> Reported-by: TOTE Robot <[email protected]>
> Signed-off-by: Yu Yang <[email protected]>
> ---
> fftools/cmdutils.c | 4 +---
> fftools/cmdutils.h | 4 ++--
> fftools/ffmpeg_opt.c | 5 +++--
> 3 files changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
> index 3c8e5a82cd..4b977f16e5 100644
> --- a/fftools/cmdutils.c
> +++ b/fftools/cmdutils.c
> @@ -2181,13 +2181,11 @@ AVDictionary
> **setup_find_stream_info_opts(AVFormatContext *s,
> int i;
> AVDictionary **opts;
>
> - if (!s->nb_streams)
> - return NULL;
Moving this check to the caller makes this a bit uglier and misses the
point that this function is also called from ffplay and ffprobe (where
they will cause unnecessary allocations of arrays with zero entries).
> opts = av_calloc(s->nb_streams, sizeof(*opts));
> if (!opts) {
> av_log(NULL, AV_LOG_ERROR,
> "Could not alloc memory for stream options.\n");
> - return NULL;
> + exit_program(1);
> }
> for (i = 0; i < s->nb_streams; i++)
> opts[i] = filter_codec_opts(codec_opts,
> s->streams[i]->codecpar->codec_id,
> diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h
> index 82cda208be..50eed9b13a 100644
> --- a/fftools/cmdutils.h
> +++ b/fftools/cmdutils.h
> @@ -430,8 +430,8 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum
> AVCodecID codec_id,
> * Each dictionary will contain the options from codec_opts which can
> * be applied to the corresponding stream codec context.
> *
> - * @return pointer to the created array of dictionaries, NULL if it
> - * cannot be created
> + * @return pointer to the created array of dictionaries.
> + * Calls exit() on failure.
> */
> AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
> AVDictionary *codec_opts);
> diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
> index a703798586..aac40acb9f 100644
> --- a/fftools/ffmpeg_opt.c
> +++ b/fftools/ffmpeg_opt.c
> @@ -1191,9 +1191,10 @@ static int open_input_file(OptionsContext *o, const
> char *filename)
> choose_decoder(o, ic, ic->streams[i]);
>
> if (find_stream_info) {
> - AVDictionary **opts = setup_find_stream_info_opts(ic,
> o->g->codec_opts);
> + AVDictionary **opts = NULL;
> int orig_nb_streams = ic->nb_streams;
> -
> + if (orig_nb_streams > 0)
> + opts = setup_find_stream_info_opts(ic, o->g->codec_opts);
> /* If not enough info to get the stream parameters, we decode the
> first frames to get it. (used in mpeg case for example) */
> ret = avformat_find_stream_info(ic, opts);
>
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".