mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
[ELF.h] - Check the case when e_shstrndx=SHN_XINDEX, but the corresponding sh_link is broken.
When e_shstrndx is equal to SHN_XINDEX, the index of the section string table section should be taken from the sh_link field of the section header at index 0. If sh_link is broken, e.g. contains an index that is larger than number of sections, then error is reported. This error message was untested before. Differential revision: https://reviews.llvm.org/D65391 llvm-svn: 368139
This commit is contained in:
parent
1622ba3df6
commit
992cb02798
@ -465,7 +465,6 @@ ELFFile<ELFT>::getSectionStringTable(Elf_Shdr_Range Sections) const {
|
||||
|
||||
if (!Index) // no section string table.
|
||||
return "";
|
||||
// TODO: Test a case when the sh_link of the section with index 0 is broken.
|
||||
if (Index >= Sections.size())
|
||||
return createError("section header string table index " + Twine(Index) +
|
||||
" does not exist");
|
||||
|
@ -652,3 +652,23 @@ Sections:
|
||||
DynamicSymbols:
|
||||
- Name: foo
|
||||
Binding: STB_GLOBAL
|
||||
|
||||
## Check the case when e_shstrndx == SHN_XINDEX, but null section's sh_link contains
|
||||
## the index of a section header string table that is larger than the number of the sections.
|
||||
|
||||
# RUN: yaml2obj --docnum=31 %s -o %t31
|
||||
# RUN: not llvm-objcopy %t31 2>&1 | FileCheck %s -DFILE=%t31 --check-prefix=INVALID-SHSTRTAB-INDEX
|
||||
|
||||
# INVALID-SHSTRTAB-INDEX: error: section header string table index 255 does not exist
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_REL
|
||||
Machine: EM_X86_64
|
||||
## SHN_XINDEX == 0xffff.
|
||||
SHStrNdx: 0xffff
|
||||
Sections:
|
||||
- Type: SHT_NULL
|
||||
Link: 0xff
|
||||
|
Loading…
Reference in New Issue
Block a user