From 872732b2c90eda09f6db1a21b5eee6dc36e813f3 Mon Sep 17 00:00:00 2001 From: James Zern Date: Thu, 28 Apr 2022 17:45:47 -0700 Subject: [PATCH] examples: add missing argv_dup alloc checks Change-Id: Ia3080cbf50071d599c7168a20466392a963f101a --- args.c | 1 + examples/vp9_spatial_svc_encoder.c | 4 ++++ vpxdec.c | 9 ++++++++- vpxenc.c | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/args.c b/args.c index 17b6155..4afb9c0 100644 --- a/args.c +++ b/args.c @@ -83,6 +83,7 @@ const char *arg_next(struct arg *arg) { char **argv_dup(int argc, const char **argv) { char **new_argv = malloc((argc + 1) * sizeof(*argv)); + if (!new_argv) return NULL; memcpy(new_argv, argv, argc * sizeof(*argv)); new_argv[argc] = NULL; diff --git a/examples/vp9_spatial_svc_encoder.c b/examples/vp9_spatial_svc_encoder.c index 455f6c9..c45edb9 100644 --- a/examples/vp9_spatial_svc_encoder.c +++ b/examples/vp9_spatial_svc_encoder.c @@ -222,6 +222,10 @@ static void parse_command_line(int argc, const char **argv_, // process command line options argv = argv_dup(argc - 1, argv_ + 1); + if (!argv) { + fprintf(stderr, "Error allocating argument list\n"); + exit(EXIT_FAILURE); + } for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step) { arg.argv_step = 1; diff --git a/vpxdec.c b/vpxdec.c index 363eb1a..84cef7d 100644 --- a/vpxdec.c +++ b/vpxdec.c @@ -581,7 +581,10 @@ static int main_loop(int argc, const char **argv_) { /* Parse command line */ exec_name = argv_[0]; argv = argv_dup(argc - 1, argv_ + 1); - + if (!argv) { + fprintf(stderr, "Error allocating argument list\n"); + return EXIT_FAILURE; + } for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step) { memset(&arg, 0, sizeof(arg)); arg.argv_step = 1; @@ -1123,6 +1126,10 @@ int main(int argc, const char **argv_) { int error = 0; argv = argv_dup(argc - 1, argv_ + 1); + if (!argv) { + fprintf(stderr, "Error allocating argument list\n"); + return EXIT_FAILURE; + } for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step) { memset(&arg, 0, sizeof(arg)); arg.argv_step = 1; diff --git a/vpxenc.c b/vpxenc.c index b64b6cf..7eff97b 100644 --- a/vpxenc.c +++ b/vpxenc.c @@ -1703,6 +1703,10 @@ int main(int argc, const char **argv_) { * codec. */ argv = argv_dup(argc - 1, argv_ + 1); + if (!argv) { + fprintf(stderr, "Error allocating argument list\n"); + return EXIT_FAILURE; + } parse_global_config(&global, argv); if (argc < 3) usage_exit(); -- 2.7.4