PR28542, Undefined behaviours in readelf.c
authorAlan Modra <amodra@gmail.com>
Mon, 8 Nov 2021 22:32:03 +0000 (09:02 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 9 Nov 2021 22:50:10 +0000 (09:20 +1030)
PR 28542
* readelf.c (dump_relocations): Check that section headers have
been read before attempting to access section name.
(print_dynamic_symbol): Likewise.
(process_mips_specific): Delete dead code.

binutils/readelf.c

index 50129f4ab4f12283f75b2eceb39aaba6ea02286f..c71d542f051bb372adccbc4deb47b4399f0fb8f1 100644 (file)
@@ -1934,7 +1934,8 @@ dump_relocations (Filedata *          filedata,
 
                  if (ELF_ST_TYPE (psym->st_info) == STT_SECTION)
                    {
-                     if (psym->st_shndx < filedata->file_header.e_shnum)
+                     if (psym->st_shndx < filedata->file_header.e_shnum
+                         && filedata->section_headers != NULL)
                        sec_name = section_name_print (filedata,
                                                       filedata->section_headers
                                                       + psym->st_shndx);
@@ -12861,6 +12862,7 @@ print_dynamic_symbol (Filedata *filedata, unsigned long si,
 
   if (ELF_ST_TYPE (psym->st_info) == STT_SECTION
       && psym->st_shndx < filedata->file_header.e_shnum
+      && filedata->section_headers != NULL
       && psym->st_name == 0)
     {
       is_valid
@@ -18262,7 +18264,6 @@ process_mips_specific (Filedata * filedata)
       Elf_External_Options * eopt;
       size_t offset;
       int cnt;
-      sect = filedata->section_headers;
 
       /* Find the section header so that we get the size.  */
       sect = find_section_by_type (filedata, SHT_MIPS_OPTIONS);