mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Recommit r284371 "[Object/ELF] - Check that e_shnum is null when e_shoff is."
With fix: hex edited the precompiled inputs from another testcases to pass new checks. Original commit message: [Object/ELF] - Check that e_shnum is null when e_shoff is. Spec says (http://www.sco.com/developers/gabi/1998-04-29/ch4.eheader.html) : e_shnum This member holds the number of entries in the section header table. Thus the product of e_shentsize and e_shnum gives the section header table's size in bytes. If a file has no section header table, e_shnum holds the value zero. Revealed using "id_000037,sig_11,src_000015,op_havoc,rep_8" from PR30540 That was the reason of crash in lld on incorrect input file. Binary reduced using afl-min. Differential revision: https://reviews.llvm.org/D25090 llvm-svn: 284374
This commit is contained in:
parent
3e8a00e71a
commit
c57ded4428
@ -319,8 +319,12 @@ ELFFile<ELFT>::ELFFile(StringRef Object, std::error_code &EC)
|
||||
|
||||
Header = reinterpret_cast<const Elf_Ehdr *>(base());
|
||||
|
||||
if (Header->e_shoff == 0)
|
||||
if (Header->e_shoff == 0) {
|
||||
if (Header->e_shnum != 0)
|
||||
report_fatal_error(
|
||||
"e_shnum should be zero if a file has no section header table");
|
||||
return;
|
||||
}
|
||||
|
||||
const uint64_t SectionTableOffset = Header->e_shoff;
|
||||
|
||||
|
Binary file not shown.
BIN
test/Object/Inputs/invalid-e_shnum.elf
Normal file
BIN
test/Object/Inputs/invalid-e_shnum.elf
Normal file
Binary file not shown.
Binary file not shown.
@ -55,6 +55,9 @@ INVALID-SYMTAB-SIZE: Invalid data was encountered while parsing the file
|
||||
RUN: not llvm-readobj -t %p/Inputs/invalid-xindex-size.elf 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s
|
||||
INVALID-XINDEX-SIZE: Invalid data was encountered while parsing the file.
|
||||
|
||||
RUN: not llvm-readobj -t %p/Inputs/invalid-e_shnum.elf 2>&1 | FileCheck --check-prefix=INVALID-SH-NUM %s
|
||||
INVALID-SH-NUM: e_shnum should be zero if a file has no section header table
|
||||
|
||||
RUN: not llvm-readobj -t %p/Inputs/invalid-ext-symtab-index.elf-x86-64 2>&1 | \
|
||||
RUN: FileCheck --check-prefix=INVALID-EXT-SYMTAB-INDEX %s
|
||||
INVALID-EXT-SYMTAB-INDEX: Invalid symbol table index
|
||||
|
Loading…
x
Reference in New Issue
Block a user