forked from OSchip/llvm-project
[llvm-readelf] - Don't crash when e_shstrndx==SHN_XINDEX, but there is no section header.
Currently we crash when trying to print --sections and the SHN_XINDEX escape value is used for the e_shstrndx field, but there is no section header at index 0 to read the value from. Differential revision: https://reviews.llvm.org/D82374
This commit is contained in:
parent
72131423cc
commit
31fe8c2763
|
@ -516,8 +516,17 @@ Expected<StringRef>
|
|||
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 "";
|
||||
|
|
|
@ -34,13 +34,24 @@ Sections:
|
|||
|
||||
# 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:
|
||||
|
|
Loading…
Reference in New Issue