From 41da082238bbc3bbe8bac1b0fbcab716fe7c87f2 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 10 Mar 2020 13:22:25 +1030 Subject: [PATCH] objdump disassembly of files without symbols ubsan complains about memcpy with a NULL src even when size is zero. * objdump.c (disassemble_section): Don't call qsort unless sym count is at least two. (disassemble_data): Don't call memcpy with NULL src. --- binutils/ChangeLog | 6 ++++++ binutils/objdump.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 05c29397f8..fc456a2259 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2020-03-10 Alan Modra + + * objdump.c (disassemble_section): Don't call qsort unless + sym count is at least two. + (disassemble_data): Don't call memcpy with NULL src. + 2020-03-09 Alan Modra PR 25645 diff --git a/binutils/objdump.c b/binutils/objdump.c index 6eef38f0e2..211be9239f 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -3109,7 +3109,8 @@ disassemble_section (bfd *abfd, asection *section, void *inf) /* Sort the symbols into value and section order. */ compare_section = section; - qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols); + if (sorted_symcount > 1) + qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols); /* Skip over the relocs belonging to addresses below the start address. */ @@ -3376,10 +3377,13 @@ disassemble_data (bfd *abfd) sorted_symcount = symcount ? symcount : dynsymcount; sorted_syms = (asymbol **) xmalloc ((sorted_symcount + synthcount) * sizeof (asymbol *)); - memcpy (sorted_syms, symcount ? syms : dynsyms, - sorted_symcount * sizeof (asymbol *)); + if (sorted_symcount != 0) + { + memcpy (sorted_syms, symcount ? syms : dynsyms, + sorted_symcount * sizeof (asymbol *)); - sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount); + sorted_symcount = remove_useless_symbols (sorted_syms, sorted_symcount); + } for (i = 0; i < synthcount; ++i) { -- 2.34.1