aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-01 18:18:13 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-02 21:42:29 +0200
commit70028ce7fd888c6ee04047f7f04194cfcb48c382 (patch)
tree10701aa5a73223b396b51c5c8e79c28572bcdce5
parentffb599458f34c9ba674dc82e8f3ba07ef3b01948 (diff)
downloadffmpeg-70028ce7fd888c6ee04047f7f04194cfcb48c382.tar.gz
avformat/utils: Check allocations for failure
There would be leaks in case of failure. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> (cherry picked from commit 543e4a194252050cf1abcded7c75e4b889e3db4f)
-rw-r--r--libavformat/utils.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index a65d14234a..1384b56771 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -4603,7 +4603,7 @@ fail:
AVProgram *av_new_program(AVFormatContext *ac, int id)
{
AVProgram *program = NULL;
- int i;
+ int i, ret;
av_log(ac, AV_LOG_TRACE, "new_program: id=0x%04x\n", id);
@@ -4615,7 +4615,11 @@ AVProgram *av_new_program(AVFormatContext *ac, int id)
program = av_mallocz(sizeof(AVProgram));
if (!program)
return NULL;
- dynarray_add(&ac->programs, &ac->nb_programs, program);
+ ret = av_dynarray_add_nofree(&ac->programs, &ac->nb_programs, program);
+ if (ret < 0) {
+ av_free(program);
+ return NULL;
+ }
program->discard = AVDISCARD_NONE;
program->pmt_version = -1;
program->id = id;
@@ -4635,7 +4639,7 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_ba
int64_t start, int64_t end, const char *title)
{
AVChapter *chapter = NULL;
- int i;
+ int i, ret;
if (end != AV_NOPTS_VALUE && start > end) {
av_log(s, AV_LOG_ERROR, "Chapter end time %"PRId64" before start %"PRId64"\n", end, start);
@@ -4655,7 +4659,11 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_ba
chapter = av_mallocz(sizeof(AVChapter));
if (!chapter)
return NULL;
- dynarray_add(&s->chapters, &s->nb_chapters, chapter);
+ ret = av_dynarray_add_nofree(&s->chapters, &s->nb_chapters, chapter);
+ if (ret < 0) {
+ av_free(chapter);
+ return NULL;
+ }
}
av_dict_set(&chapter->metadata, "title", title, 0);
chapter->id = id;