aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-07-26 17:06:23 +0200
committerTom de Vries <tdevries@suse.de>2023-07-26 17:06:23 +0200
commit200546f1a33bd4e6d81d5bdef8d26836a7504bdb (patch)
tree9681bad2404e68c0654693938cf65eb545f876ed
parentac284430be5471a292eebd235266aca3e65a2de9 (diff)
downloadbinutils-200546f1a33bd4e6d81d5bdef8d26836a7504bdb.zip
binutils-200546f1a33bd4e6d81d5bdef8d26836a7504bdb.tar.gz
binutils-200546f1a33bd4e6d81d5bdef8d26836a7504bdb.tar.bz2
[gdb/build] Fix Wstringop-truncation in coff_getfilename
When building gdb with -O2 -fsanitize-threads, I ran into a Werror=stringop-truncation. The problem is here in coff_getfilename in coffread.c: ... strncpy (buffer, aux_entry->x_file.x_n.x_fname, FILNMLEN); buffer[FILNMLEN] = '\0'; ... The constant FILNMLEN is expected to designate the size of aux_entry->x_file.x_n.x_fname, but that's no longer the case since commit 60ebc257517 ("Fixes a buffer overflow when compiling assembler for the MinGW targets."). Fix this by using "sizeof (aux_entry->x_file.x_n.x_fname)" instead. Likewise in xcoffread.c. Tested on x86_64-linux. Approved-By: Tom Tromey <tom@tromey.com> PR build/30669 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30669
-rw-r--r--gdb/coffread.c5
-rw-r--r--gdb/xcoffread.c5
2 files changed, 6 insertions, 4 deletions
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 33fb2ba..6ec341c 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -1371,8 +1371,9 @@ coff_getfilename (union internal_auxent *aux_entry)
}
else
{
- strncpy (buffer, aux_entry->x_file.x_n.x_fname, FILNMLEN);
- buffer[FILNMLEN] = '\0';
+ size_t x_fname_len = sizeof (aux_entry->x_file.x_n.x_fname);
+ strncpy (buffer, aux_entry->x_file.x_n.x_fname, x_fname_len);
+ buffer[x_fname_len] = '\0';
}
result = buffer;
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 1538d1c..8930cf1 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -1598,8 +1598,9 @@ coff_getfilename (union internal_auxent *aux_entry, struct objfile *objfile)
+ aux_entry->x_file.x_n.x_n.x_offset));
else
{
- strncpy (buffer, aux_entry->x_file.x_n.x_fname, FILNMLEN);
- buffer[FILNMLEN] = '\0';
+ size_t x_fname_len = sizeof (aux_entry->x_file.x_n.x_fname);
+ strncpy (buffer, aux_entry->x_file.x_n.x_fname, x_fname_len);
+ buffer[x_fname_len] = '\0';
}
return (buffer);
}