[llvm-readelf] - Do not crash when dumping the dynamic symbol table when its sh_entzize == 0.

We have a division by zero crash currently when
the sh_entzize of the dynamic symbol table is 0.

Differential revision: https://reviews.llvm.org/D82180
This commit is contained in:
Georgii Rymar 2020-06-19 16:21:57 +03:00
parent 2580635bd2
commit f38f068b14
2 changed files with 24 additions and 2 deletions

View File

@ -490,3 +490,26 @@ ProgramHeaders:
Sections:
- Section: .dynstr
- Section: .dynamic
## Check we report a warning when the entry size of the dynamic symbol table is zero.
# RUN: yaml2obj %s --docnum=14 -o %t15
# RUN: llvm-readobj --dyn-symbols %t15 2>&1 | FileCheck %s -DFILE=%t15 --check-prefix=DYNSYM-ZERO-ENTSIZE-LLVM
# RUN: llvm-readelf --dyn-symbols %t15 2>&1 | \
# RUN: FileCheck %s -DFILE=%t15 --check-prefix=DYNSYM-ZERO-ENTSIZE-GNU --implicit-check-not="Symbol table"
# DYNSYM-ZERO-ENTSIZE-LLVM: DynamicSymbols [
# DYNSYM-ZERO-ENTSIZE-LLVM-NEXT: warning: '[[FILE]]': section with index 1 has invalid size (0x10) or entry size (0x0)
# DYNSYM-ZERO-ENTSIZE-LLVM-NEXT: ]
# DYNSYM-ZERO-ENTSIZE-GNU: warning: '[[FILE]]': section with index 1 has invalid size (0x10) or entry size (0x0)
--- !ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_386
Sections:
- Name: .dynsym
Type: SHT_DYNSYM
EntSize: 0x0

View File

@ -678,8 +678,7 @@ void ELFDumper<ELFT>::printSymbolsHelper(bool IsDynamic) const {
StrTable = DynamicStringTable;
Syms = dynamic_symbols();
SymtabName = DynSymtabName;
if (DynSymRegion)
Entries = DynSymRegion->Size / DynSymRegion->EntSize;
Entries = Syms.size();
} else {
if (!DotSymtabSec)
return;