summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2021-03-16 14:02:38 +0000
committerNick Clifton <nickc@redhat.com>2021-03-16 14:02:59 +0000
commitee42883cff56a3fb6fb4ff939dd3c8c4f42d4c12 (patch)
tree76cde264402b4677f2c10c65e5cb634cd617acd8 /ld/pe-dll.c
parentFix a potential buffer overrun qwhen writing out PE aux entries. (diff)
downloadbinutils-gdb-ee42883cff56a3fb6fb4ff939dd3c8c4f42d4c12.tar.gz
binutils-gdb-ee42883cff56a3fb6fb4ff939dd3c8c4f42d4c12.tar.bz2
binutils-gdb-ee42883cff56a3fb6fb4ff939dd3c8c4f42d4c12.zip
Fix potentially undefined behaviour use of strcpcy.
* pe-dll.c (pe_find_cdecl_alias_match): Use memmove to overwrite lname string.
Diffstat (limited to 'ld/pe-dll.c')
-rw-r--r--ld/pe-dll.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index eaecb951efd..7aba09cd359 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -3039,7 +3039,9 @@ pe_find_cdecl_alias_match (struct bfd_link_info *linfo, char *name)
if (pe_details->underscored)
lname[0] = '_';
else
- strcpy (lname, lname + 1);
+ /* Use memmove rather than strcpy as that
+ can handle overlapping buffers. */
+ memmove (lname, lname + 1, strlen (lname));
key.key = lname;
kv = bsearch (&key, udef_table, undef_count,
sizeof (struct key_value), undef_sort_cmp);