From ee462f129c5af41729bb3b17f2a7563ad0f5b48d Mon Sep 17 00:00:00 2001 From: Joseph Schuchart Date: Wed, 10 Mar 2021 17:54:14 +0100 Subject: [PATCH] Make sure to never allocate zero-length memory buffer in opal_argv_join_range This silences a warning issued by GCC 10.2.0, warning about `str[--str_len] = '\0'` writing out of bounds if str_len is 0. This also ensures that 0 is not passed to malloc, which may return NULL and lead to a unintended return value. Signed-off-by: Joseph Schuchart --- opal/util/argv.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/opal/util/argv.c b/opal/util/argv.c index c5c4de71683..2464013e46c 100644 --- a/opal/util/argv.c +++ b/opal/util/argv.c @@ -343,7 +343,7 @@ char *opal_argv_join_range(char **argv, size_t start, size_t end, int delimiter) /* Bozo case */ - if (NULL == argv || NULL == argv[0] || (int)start > opal_argv_count(argv)) { + if (NULL == argv || NULL == argv[0] || (int)start >= opal_argv_count(argv)) { return strdup(""); } @@ -354,10 +354,15 @@ char *opal_argv_join_range(char **argv, size_t start, size_t end, int delimiter) str_len += strlen(*p) + 1; } + if (0 == str_len) { + return strdup(""); + } + /* Allocate the string. */ - if (NULL == (str = (char*) malloc(str_len))) + if (NULL == (str = (char*) malloc(str_len))) { return NULL; + } /* Loop filling in the string. */