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:
parent
b899eb3bb8
commit
ffebb0bbde
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user