[libbacktrace] Handle bsearch with NULL base in dwarf_lookup_pc

The call to bsearch in dwarf_lookup_pc can have NULL as base argument when
the nmemb argument is 0.  The base argument is required to be pointing to the
initial member of an array of nmemb objects.  It is not specified what
constitutes a valid pointer to an array of 0 objects, but glibc declares base
with attribute non-null, so the NULL will trigger a sanitizer runtime error.

Fix this by only calling bsearch if nmemb != 0.

2019-02-12  Tom de Vries  <tdevries@suse.de>

	PR libbacktrace/81983
	* dwarf.c (dwarf_lookup_pc): Don't call bsearch if nmemb == 0.

From-SVN: r268796
This commit is contained in:
Tom de Vries 2019-02-12 14:00:59 +00:00 committed by Tom de Vries
parent b3f2b048eb
commit 68641fb77c
2 changed files with 9 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2019-02-12 Tom de Vries <tdevries@suse.de>
PR libbacktrace/81983
* dwarf.c (dwarf_lookup_pc): Don't call bsearch if nmemb == 0.
2019-02-10 Tom de Vries <tdevries@suse.de>
* Makefile.am (BUILDTESTS): Add btest_lto.

View File

@ -2821,8 +2821,10 @@ dwarf_lookup_pc (struct backtrace_state *state, struct dwarf_data *ddata,
*found = 1;
/* Find an address range that includes PC. */
entry = bsearch (&pc, ddata->addrs, ddata->addrs_count,
sizeof (struct unit_addrs), unit_addrs_search);
entry = (ddata->addrs_count == 0
? NULL
: bsearch (&pc, ddata->addrs, ddata->addrs_count,
sizeof (struct unit_addrs), unit_addrs_search));
if (entry == NULL)
{