From: Alan Modra Date: Thu, 2 May 2024 09:32:48 +0000 (+0930) Subject: PR31692, objdump fails .debug_info size check X-Git-Tag: gdb-15-branchpoint~205 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=635d05b88f4823f46ef1ddbb3d438db16c0f6e71;p=thirdparty%2Fbinutils-gdb.git PR31692, objdump fails .debug_info size check PR 31692 * objdump.c (load_specific_debug_section): Replace bfd_get_size check with bfd_section_size_insane. Call free_debug_section after printing error messages. Set section->start NULL when freeing. --- diff --git a/binutils/objdump.c b/binutils/objdump.c index 5acaa54929d..3d70df470f2 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -4286,6 +4286,7 @@ load_specific_debug_section (enum dwarf_section_display_enum debug, if (streq (section->filename, bfd_get_filename (abfd))) return true; free (section->start); + section->start = NULL; } section->filename = bfd_get_filename (abfd); @@ -4297,13 +4298,12 @@ load_specific_debug_section (enum dwarf_section_display_enum debug, alloced = amt = section->size + 1; if (alloced != amt || alloced == 0 - || (bfd_get_size (abfd) != 0 && alloced >= bfd_get_size (abfd))) + || bfd_section_size_insane (abfd, sec)) { - section->start = NULL; - free_debug_section (debug); printf (_("\nSection '%s' has an invalid size: %#" PRIx64 ".\n"), sanitize_string (section->name), section->size); + free_debug_section (debug); return false; } @@ -4345,9 +4345,9 @@ load_specific_debug_section (enum dwarf_section_display_enum debug, if (!ret) { - free_debug_section (debug); printf (_("\nCan't get contents for section '%s'.\n"), sanitize_string (section->name)); + free_debug_section (debug); return false; }