mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-19 22:03:57 +08:00
PR26459 UBSAN: elfnn-ia64.c:1945 null pointer bsearch
PR 26495 * elfnn-ia64.c (get_dyn_sym_info): Don't bsearch or look at last element when count is zero. bfd_realloc when shrinking.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2020-08-29 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 26495
|
||||||
|
* elfnn-ia64.c (get_dyn_sym_info): Don't bsearch or look at last
|
||||||
|
element when count is zero. bfd_realloc when shrinking.
|
||||||
|
|
||||||
2020-08-28 Alan Modra <amodra@gmail.com>
|
2020-08-28 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 26418
|
PR 26418
|
||||||
|
@ -1867,18 +1867,16 @@ get_dyn_sym_info (struct elfNN_ia64_link_hash_table *ia64_info,
|
|||||||
key.addend = addend;
|
key.addend = addend;
|
||||||
dyn_i = bsearch (&key, info, sorted_count,
|
dyn_i = bsearch (&key, info, sorted_count,
|
||||||
sizeof (*info), addend_compare);
|
sizeof (*info), addend_compare);
|
||||||
|
|
||||||
if (dyn_i)
|
if (dyn_i)
|
||||||
{
|
return dyn_i;
|
||||||
return dyn_i;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do a quick check for the last inserted entry. */
|
if (count != 0)
|
||||||
dyn_i = info + count - 1;
|
|
||||||
if (dyn_i->addend == addend)
|
|
||||||
{
|
{
|
||||||
return dyn_i;
|
/* Do a quick check for the last inserted entry. */
|
||||||
|
dyn_i = info + count - 1;
|
||||||
|
if (dyn_i->addend == addend)
|
||||||
|
return dyn_i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1932,19 +1930,23 @@ get_dyn_sym_info (struct elfNN_ia64_link_hash_table *ia64_info,
|
|||||||
if (size != count)
|
if (size != count)
|
||||||
{
|
{
|
||||||
amt = count * sizeof (*info);
|
amt = count * sizeof (*info);
|
||||||
info = bfd_malloc (amt);
|
info = bfd_realloc (info, amt);
|
||||||
if (info != NULL)
|
*size_p = count;
|
||||||
{
|
if (info == NULL && count != 0)
|
||||||
memcpy (info, *info_p, amt);
|
/* realloc should never fail since we are reducing size here,
|
||||||
free (*info_p);
|
but if it does use the old array. */
|
||||||
*size_p = count;
|
info = *info_p;
|
||||||
*info_p = info;
|
else
|
||||||
}
|
*info_p = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
key.addend = addend;
|
if (count == 0)
|
||||||
dyn_i = bsearch (&key, info, count,
|
dyn_i = NULL;
|
||||||
sizeof (*info), addend_compare);
|
else
|
||||||
|
{
|
||||||
|
key.addend = addend;
|
||||||
|
dyn_i = bsearch (&key, info, count, sizeof (*info), addend_compare);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return dyn_i;
|
return dyn_i;
|
||||||
|
Reference in New Issue
Block a user