From c47f70e2ce7b347aadbde873aae6c2df92c42180 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 29 Jan 2020 12:53:55 -0500 Subject: [PATCH] Fix -Werror-stringop error on infcmd.c:construct_inferior_arguments While testing a GCC 10 build of our git HEAD, Sergio noticed an error triggered by -Werror-stringop on infcmd.c:construct_inferior_arguments. One of the things the function does is calculate the length of the string that will hold the inferior's arguments. GCC warns us that 'length' can be 0, which can lead to undesired behaviour: ../../gdb/infcmd.c: In function 'char* construct_inferior_arguments(int, char**)': ../../gdb/infcmd.c:369:17: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] 369 | result[0] = '\0'; | ~~~~~~~~~~^~~~~~ ../../gdb/infcmd.c:368:33: note: at offset 0 to an object with size 0 allocated by 'xmalloc' here 368 | result = (char *) xmalloc (length); | ~~~~~~~~^~~~~~~~ The solution here is to assert that 'argc' is greater than 0 on entry, which makes GCC understand that the loops always run at least once, and thus 'length' is always > 0. Tested by rebuilding. gdb/ChangeLog: 2020-01-29 Pedro Alves Sergio Durigan Junior * infcmd.c (construct_inferior_arguments): Assert that 'argc' is greater than 0. Change-Id: Ide8407cbedcb4921de1843a6a15bbcb7676c7d26 --- gdb/ChangeLog | 6 ++++++ gdb/infcmd.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ee2ba1c38db..535249196a8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-01-29 Pedro Alves + Sergio Durigan Junior + + * infcmd.c (construct_inferior_arguments): Assert that + 'argc' is greater than 0. + 2020-01-29 Luis Machado * aarch64-tdep.c (BRK_INSN_MASK): Define to 0xffe0001f. diff --git a/gdb/infcmd.c b/gdb/infcmd.c index b44adca88df..62890bde2a2 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -268,6 +268,11 @@ construct_inferior_arguments (int argc, char **argv) { char *result; + /* ARGC should always be at least 1, but we double check this + here. This is also needed to silence -Werror-stringop + warnings. */ + gdb_assert (argc > 0); + if (startup_with_shell) { #ifdef __MINGW32__ -- 2.30.2