Fix an attempt to free a static pointer when using objcopy's symbol addition feature.

PR 25220
	* objcopy.c (empty_name): New variable.
	(need_sym_before): Prevent an attempt to free a static variable.
	(filter_symbols): Avoid strcmp test by checking for pointer
	equality.
This commit is contained in:
Nick Clifton 2020-01-09 16:51:04 +00:00
parent b899eb3bb8
commit ffebb0bbde
2 changed files with 18 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2020-01-09 Nick Clifton <nickc@redhat.com>
PR 25220
* objcopy.c (empty_name): New variable.
(need_sym_before): Prevent an attempt to free a static variable.
(filter_symbols): Avoid strcmp test by checking for pointer
equality.
2020-01-09 Nick Clifton <nickc@redhat.com>
* po/zh_TW.po: Updated Traditional Chinese translation.

View File

@ -68,7 +68,7 @@ struct addsym_node
long symval;
flagword flags;
char * section;
char * othersym;
const char * othersym;
};
typedef struct section_rename
@ -808,7 +808,7 @@ parse_flags (const char *s)
string can't be parsed. */
static flagword
parse_symflags (const char *s, char **other)
parse_symflags (const char *s, const char **other)
{
flagword ret;
const char *snext;
@ -1453,6 +1453,9 @@ is_hidden_symbol (asymbol *sym)
return FALSE;
}
/* Empty name is hopefully never a valid symbol name. */
static const char * empty_name = "";
static bfd_boolean
need_sym_before (struct addsym_node **node, const char *sym)
{
@ -1464,10 +1467,12 @@ need_sym_before (struct addsym_node **node, const char *sym)
{
if (!ptr->othersym)
break;
if (ptr->othersym == empty_name)
continue;
else if (strcmp (ptr->othersym, sym) == 0)
{
free (ptr->othersym);
ptr->othersym = ""; /* Empty name is hopefully never a valid symbol name. */
free ((char *) ptr->othersym);
ptr->othersym = empty_name;
*node = ptr;
return TRUE;
}
@ -1695,7 +1700,7 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
{
if (ptr->othersym)
{
if (strcmp (ptr->othersym, ""))
if (ptr->othersym != empty_name)
fatal (_("'before=%s' not found"), ptr->othersym);
}
else