From ed5e255c023c9b78120d9ff2246d6516f652d4b7 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Mon, 10 Feb 2020 19:32:39 +0100 Subject: [PATCH] Fix stringop-overflow warning GCC gives the following compile warning: grubby.c: In function 'main': grubby.c:4508:27: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] 4508 | saved_command_line[0] = '\0'; | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~ grubby.c:4503:26: note: at offset 0 to an object with size 0 allocated by 'malloc' here 4503 | saved_command_line = malloc(i); | ^~~~~~~~~ cc1: all warnings being treated as errors make: *** [Makefile:38: grubby.o] Error 1 Signed-off-by: Javier Martinez Canillas --- grubby.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/grubby.c b/grubby.c index 5ca689539cf..0c0f67a0ae5 100644 --- a/grubby.c +++ b/grubby.c @@ -4500,23 +4500,26 @@ int main(int argc, const char ** argv) { int i = 0; for (int j = 1; j < argc; j++) i += strlen(argv[j]) + 1; - saved_command_line = malloc(i); - if (!saved_command_line) { - fprintf(stderr, "grubby: %m\n"); - exit(1); - } - saved_command_line[0] = '\0'; - int cmdline_len = 0, arg_len; - for (int j = 1; j < argc; j++) { - arg_len = strlen(argv[j]); - memcpy(saved_command_line + cmdline_len, argv[j], arg_len); - cmdline_len += arg_len; - if (j != argc - 1) { - memcpy(saved_command_line + cmdline_len, " ", 1); - cmdline_len++; - } + + if (i > 0) { + saved_command_line = malloc(i); + if (!saved_command_line) { + fprintf(stderr, "grubby: %m\n"); + exit(1); + } + saved_command_line[0] = '\0'; + int cmdline_len = 0, arg_len; + for (int j = 1; j < argc; j++) { + arg_len = strlen(argv[j]); + memcpy(saved_command_line + cmdline_len, argv[j], arg_len); + cmdline_len += arg_len; + if (j != argc - 1) { + memcpy(saved_command_line + cmdline_len, " ", 1); + cmdline_len++; + } + } + saved_command_line[cmdline_len] = '\0'; } - saved_command_line[cmdline_len] = '\0'; optCon = poptGetContext("grubby", argc, argv, options, 0); poptReadDefaultConfig(optCon, 1); -- 2.24.1