Index: include/llvm/Object/ELF.h =================================================================== --- include/llvm/Object/ELF.h +++ include/llvm/Object/ELF.h @@ -144,6 +144,8 @@ Expected program_headers() const { if (getHeader()->e_phnum && getHeader()->e_phentsize != sizeof(Elf_Phdr)) return createError("invalid e_phentsize"); + if (getHeader()->e_phoff + (getHeader()->e_phnum * getHeader()->e_phentsize) > getBufSize()) + return createError("program headers longer than binary"); auto *Begin = reinterpret_cast(base() + getHeader()->e_phoff); return makeArrayRef(Begin, Begin + getHeader()->e_phnum); Index: test/Object/elf-invalid-phdr.test =================================================================== --- /dev/null +++ test/Object/elf-invalid-phdr.test @@ -0,0 +1,3 @@ +RUN: not llvm-objdump -private-headers %p/Inputs/invalid-phdr.elf + +LLVM ERROR: Invalid data was encountered while parsing the file