mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
Avoid stringop-truncation errors
I configured with -fsanitize=address and built gdb. linux-tdep.c and
ada-tasks.c failed to build due to some stringop-truncation errors,
e.g.:
In function ‘char* strncpy(char*, const char*, size_t)’,
inlined from ‘int linux_fill_prpsinfo(elf_internal_linux_prpsinfo*)’ at ../../binutils-gdb/gdb/linux-tdep.c:1742:11,
inlined from ‘char* linux_make_corefile_notes(gdbarch*, bfd*, int*)’ at ../../binutils-gdb/gdb/linux-tdep.c:1878:27:
/usr/include/bits/string_fortified.h:106:34: error: ‘char* __builtin_strncpy(char*, const char*, long unsigned int)’ specified bound 81 equals destination size [-Werror=stringop-truncation]
This patch fixes the problem by using "sizeof - 1" in the call to
strndup, as recommended in the GCC manual. This doesn't make a
difference here because the next line, in all cases, sets the final
element to '\0' anyway.
gdb/ChangeLog
2020-03-20 Tom Tromey <tromey@adacore.com>
* ada-tasks.c (read_atcb): Use smaller length in strncpy call.
* linux-tdep.c (linux_fill_prpsinfo): Use smaller length in
strncpy call.
This commit is contained in:
@@ -1729,7 +1729,7 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
|
||||
|
||||
/* Copying the program name. Only the basename matters. */
|
||||
basename = lbasename (fname.get ());
|
||||
strncpy (p->pr_fname, basename, sizeof (p->pr_fname));
|
||||
strncpy (p->pr_fname, basename, sizeof (p->pr_fname) - 1);
|
||||
p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
|
||||
|
||||
infargs = get_inferior_args ();
|
||||
@@ -1739,7 +1739,7 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
|
||||
if (infargs != NULL)
|
||||
psargs = psargs + " " + infargs;
|
||||
|
||||
strncpy (p->pr_psargs, psargs.c_str (), sizeof (p->pr_psargs));
|
||||
strncpy (p->pr_psargs, psargs.c_str (), sizeof (p->pr_psargs) - 1);
|
||||
p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
|
||||
|
||||
xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
|
||||
|
||||
Reference in New Issue
Block a user