[FFmpeg-devel] [PATCH v4] fftools/opts: Avoid crash when opts could not be allocated
Yu Yang
young_chelsea at 163.com
Wed Dec 8 04:35:07 EET 2021
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 <oslab at tsinghua.edu.cn>
Signed-off-by: Yu Yang <young_chelsea at 163.com>
---
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;
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);
--
2.33.1
More information about the ffmpeg-devel
mailing list