aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2024-08-21 09:09:26 -0600
committerTom Tromey <tromey@adacore.com>2024-08-21 10:33:46 -0600
commit5d683ae3dadd78fa88c243310404480555555246 (patch)
tree3ae456bbf1d7994a74ae3b95836e8974d0c140dd
parent28c3bf55f0f9aca8619c6d01be34a02a887c5577 (diff)
downloadbinutils-5d683ae3dadd78fa88c243310404480555555246.zip
binutils-5d683ae3dadd78fa88c243310404480555555246.tar.gz
binutils-5d683ae3dadd78fa88c243310404480555555246.tar.bz2
Do not assume ELF in dwarf2/read.c
dwarf2/read.c has this code: else if (elf_section_data (sectp)->this_hdr.sh_size > bfd_get_file_size (abfd)) This assumes that the BFD is an ELF, which is an invalid assumption. A user noticed that this can sometimes cause a crash. This patch fixes the problem by changing this code to use bfd_section_size_insane. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32104 Reviewed-By: Tom de Vries <tdevries@suse.de> Reviewed-by: Keith Seitz <keiths@redhat.com>
-rw-r--r--gdb/dwarf2/read.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index fde8eee..f9f34fd 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -1423,12 +1423,11 @@ dwarf2_per_bfd::locate_sections (bfd *abfd, asection *sectp,
if ((aflag & SEC_HAS_CONTENTS) == 0)
{
}
- else if (elf_section_data (sectp)->this_hdr.sh_size
- > bfd_get_file_size (abfd))
+ else if (bfd_section_size_insane (abfd, sectp))
{
- bfd_size_type size = elf_section_data (sectp)->this_hdr.sh_size;
- warning (_("Discarding section %s which has a section size (%s"
- ") larger than the file size [in module %s]"),
+ bfd_size_type size = sectp->size;
+ warning (_("Discarding section %s which has an invalid size (%s) "
+ "[in module %s]"),
bfd_section_name (sectp), phex_nz (size, sizeof (size)),
bfd_get_filename (abfd));
}