Don't pass NULL to memcpy in gdb

I compiled gdb with -fsanitize=undefined and ran the test suite.

A couple of reports came from passing NULL to memcpy, e.g.:

[...]btrace-common.cc:176:13: runtime error: null pointer passed as argument 2, which is declared to never be null

While it would be better to fix this in the standard, in the meantime
it seems easy to avoid this error.

gdb/ChangeLog
2020-03-31  Tom Tromey  <tromey@adacore.com>

	* dwarf2/abbrev.c (abbrev_table::read): Conditionally call
	memcpy.

gdbsupport/ChangeLog
2020-03-31  Tom Tromey  <tromey@adacore.com>

	* btrace-common.cc (btrace_data_append): Conditionally call
	memcpy.
This commit is contained in:
Tom Tromey 2020-03-31 07:29:53 -06:00
parent 16b0db75af
commit af62665e13
4 changed files with 15 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2020-03-31 Tom Tromey <tromey@adacore.com>
* dwarf2/abbrev.c (abbrev_table::read): Conditionally call
memcpy.
2020-03-30 Nelson Chu <nelson.chu@sifive.com>
* features/riscv/32bit-csr.xml: Regenerated.

View File

@ -168,8 +168,9 @@ abbrev_table::read (struct objfile *objfile,
cur_abbrev->attrs =
XOBNEWVEC (&abbrev_table->m_abbrev_obstack, struct attr_abbrev,
cur_abbrev->num_attrs);
memcpy (cur_abbrev->attrs, cur_attrs.data (),
cur_abbrev->num_attrs * sizeof (struct attr_abbrev));
if (!cur_attrs.empty ())
memcpy (cur_abbrev->attrs, cur_attrs.data (),
cur_abbrev->num_attrs * sizeof (struct attr_abbrev));
abbrev_table->add_abbrev (abbrev_number, cur_abbrev);

View File

@ -1,3 +1,8 @@
2020-03-31 Tom Tromey <tromey@adacore.com>
* btrace-common.cc (btrace_data_append): Conditionally call
memcpy.
2020-03-27 Andrew Burgess <andrew.burgess@embecosm.com>
* create-version.sh: Resolve issues highlighted by shellcheck.

View File

@ -173,7 +173,8 @@ btrace_data_append (struct btrace_data *dst,
size = src->variant.pt.size + dst->variant.pt.size;
data = (gdb_byte *) xmalloc (size);
memcpy (data, dst->variant.pt.data, dst->variant.pt.size);
if (dst->variant.pt.size > 0)
memcpy (data, dst->variant.pt.data, dst->variant.pt.size);
memcpy (data + dst->variant.pt.size, src->variant.pt.data,
src->variant.pt.size);