[PATCH] D82374: [llvm-readelf] - Don't crash when e_shstrndx=SHN_XINDEX, but there is no section header.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 24 04:17:29 PDT 2020


This revision was automatically updated to reflect the committed changes.
grimar marked 2 inline comments as done.
Closed by commit rG31fe8c2763a8: [llvm-readelf] - Don't crash when e_shstrndx==SHN_XINDEX, but there is no… (authored by grimar).

Changed prior to commit:
  https://reviews.llvm.org/D82374?vs=272698&id=272970#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82374/new/

https://reviews.llvm.org/D82374

Files:
  llvm/include/llvm/Object/ELF.h
  llvm/test/tools/llvm-readobj/ELF/many-sections.s


Index: llvm/test/tools/llvm-readobj/ELF/many-sections.s
===================================================================
--- llvm/test/tools/llvm-readobj/ELF/many-sections.s
+++ llvm/test/tools/llvm-readobj/ELF/many-sections.s
@@ -34,13 +34,24 @@
 
 # RUN: yaml2obj --docnum=2 %s -o %t2
 
-# RUN: llvm-readelf --file-headers %t2 | FileCheck %s --check-prefix=GNU2
+# RUN: not llvm-readelf --file-headers --sections %t2 2>&1 | \
+# RUN:   FileCheck %s -DFILE=%t2 --check-prefix=GNU2
 # GNU2: Number of section headers:         0
 # GNU2: Section header string table index: 65535 (corrupt: out of range)
 
-# RUN: llvm-readobj --file-headers %t2 | FileCheck %s --check-prefix=LLVM2
-# LLVM2: SectionHeaderCount: 0
-# LLVM2: StringTableSectionIndex: 65535 (corrupt: out of range)
+# GNU2:       There are 0 section headers, starting at offset 0x0:
+# GNU2-EMPTY:
+# GNU2-NEXT:  Section Headers:
+# GNU2-NEXT:   [Nr] Name Type Address Off Size ES Flg Lk Inf Al
+# GNU2-NEXT:   error: '[[FILE]]': e_shstrndx == SHN_XINDEX, but the section header table is empty
+
+# RUN: llvm-readobj --file-headers --sections %t2 | \
+# RUN:   FileCheck %s --check-prefix=LLVM2 --implicit-check-not="warning:"
+# LLVM2:       SectionHeaderCount: 0
+# LLVM2:       StringTableSectionIndex: 65535 (corrupt: out of range)
+# LLVM2-NEXT: }
+# LLVM2-NEXT: Sections [
+# LLVM2-NEXT: ]
 
 --- !ELF
 FileHeader:
Index: llvm/include/llvm/Object/ELF.h
===================================================================
--- llvm/include/llvm/Object/ELF.h
+++ llvm/include/llvm/Object/ELF.h
@@ -516,8 +516,17 @@
 ELFFile<ELFT>::getSectionStringTable(Elf_Shdr_Range Sections,
                                      WarningHandler WarnHandler) const {
   uint32_t Index = getHeader()->e_shstrndx;
-  if (Index == ELF::SHN_XINDEX)
+  if (Index == ELF::SHN_XINDEX) {
+    // If the section name string table section index is greater than
+    // or equal to SHN_LORESERVE, then the actual index of the section name
+    // string table section is contained in the sh_link field of the section
+    // header at index 0.
+    if (Sections.empty())
+      return createError(
+          "e_shstrndx == SHN_XINDEX, but the section header table is empty");
+
     Index = Sections[0].sh_link;
+  }
 
   if (!Index) // no section string table.
     return "";


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82374.272970.patch
Type: text/x-patch
Size: 2321 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200624/e8e32f4e/attachment.bin>


More information about the llvm-commits mailing list