Fix -Werror-stringop error on infcmd.c:construct_inferior_arguments
authorPedro Alves <palves@redhat.com>
Wed, 29 Jan 2020 17:53:55 +0000 (12:53 -0500)
committerSergio Durigan Junior <sergiodj@redhat.com>
Wed, 29 Jan 2020 20:23:37 +0000 (15:23 -0500)
commitc47f70e2ce7b347aadbde873aae6c2df92c42180
treec33c1dd5f281fc1eafd9382f04953fbbeca6c431
parentfc1ca146f76eea0b76b1392ea1a7aa8fb0742490
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  <palves@redhat.com>
    Sergio Durigan Junior  <sergiodj@redhat.com>

* infcmd.c (construct_inferior_arguments): Assert that
'argc' is greater than 0.

Change-Id: Ide8407cbedcb4921de1843a6a15bbcb7676c7d26
gdb/ChangeLog
gdb/infcmd.c