[binutils-gdb] PR25629, objcopy : SIGSEGV in filter_symbols

Alan Modra amodra@sourceware.org
Thu Mar 5 04:53:00 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d1faf7ca0a9ecbc7f89998638e5cf08d3dca6e84

commit d1faf7ca0a9ecbc7f89998638e5cf08d3dca6e84
Author: Alan Modra <amodra@gmail.com>
Date:   Thu Mar 5 14:57:47 2020 +1030

    PR25629, objcopy : SIGSEGV in filter_symbols
    
    	PR 25629
    	* objcopy.c (filter_symbols): Don't segfault on NULL
    	prefix_symbols_string.

Diff:
---
 binutils/ChangeLog | 6 ++++++
 binutils/objcopy.c | 9 +++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 35d3fad..7ce0326 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-05  Alan Modra  <amodra@gmail.com>
+
+	PR 25629
+	* objcopy.c (filter_symbols): Don't segfault on NULL
+	prefix_symbols_string.
+
 2020-03-04  Christian Eggers  <ceggers@gmx.de>
 
 	* objcopy.c (copy_object): Convert from bytes to octets for
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index daee570..3b9f1b7 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1580,9 +1580,14 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
       if (add_leading_char || prefix_symbols_string)
 	{
 	  char *n, *ptr;
+	  size_t len = strlen (name) + 1;
 
-	  ptr = n = (char *) xmalloc (1 + strlen (prefix_symbols_string)
-				      + strlen (name) + 1);
+	  if (add_leading_char)
+	    len++;
+	  if (prefix_symbols_string)
+	    len += strlen (prefix_symbols_string);
+
+	  ptr = n = (char *) xmalloc (len);
 	  if (add_leading_char)
 	    *ptr++ = bfd_get_symbol_leading_char (obfd);



More information about the Binutils-cvs mailing list