1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00

[MachO] Fix LC_DYSYMTAB validation for external symbols

We were validating the same index (ilocalsym) twice, while iextdefsym
was never validated.

llvm-svn: 341378
This commit is contained in:
Francis Visoiu Mistrih 2018-09-04 16:31:48 +00:00
parent 11ae2c8ea9
commit 41e2dc9311
2 changed files with 52 additions and 1 deletions

View File

@ -1592,7 +1592,7 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
"command extends past the end of the symbol table");
return;
}
if (Dysymtab.nextdefsym != 0 && Dysymtab.ilocalsym > Symtab.nsyms) {
if (Dysymtab.nextdefsym != 0 && Dysymtab.iextdefsym > Symtab.nsyms) {
Err = malformedError("nextdefsym in LC_DYSYMTAB load command "
"extends past the end of the symbol table");
return;

View File

@ -0,0 +1,51 @@
#RUN: yaml2obj %s > %t1.dylib
#RUN: not llvm-objdump -d %t1.dylib 2>&1 | FileCheck %s
--- !mach-o
FileHeader:
magic: 0xFEEDFACF
cputype: 0x01000007
cpusubtype: 0x80000003
filetype: 0x00000002
ncmds: 2
sizeofcmds: 104
flags: 0x00200085
reserved: 0x00000000
LoadCommands:
- cmd: LC_SYMTAB
cmdsize: 24
symoff: 136
nsyms: 3
stroff: 0
strsize: 0
- cmd: LC_DYSYMTAB
cmdsize: 80
ilocalsym: 0
nlocalsym: 0
iextdefsym: 4
#CHECK: truncated or malformed object (nextdefsym in LC_DYSYMTAB load command extends past the end of the symbol table)
nextdefsym: 2
iundefsym: 2
nundefsym: 1
tocoff: 0
ntoc: 0
modtaboff: 0
nmodtab: 0
extrefsymoff: 0
nextrefsyms: 0
indirectsymoff: 0
nindirectsyms: 0
extreloff: 0
nextrel: 0
locreloff: 0
nlocrel: 0
LinkEditData:
StringTable:
- ' '
- __mh_execute_header
- _main
- dyld_stub_binder
- ''
- ''
- ''
...