From 3fb09b3a9e524b5efee5320e908b35b51ef58ff7 Mon Sep 17 00:00:00 2001 From: George Rimar Date: Thu, 27 Oct 2016 11:41:57 +0000 Subject: [PATCH] [Object/ELF] - Do not crash if string table sh_size is equal to zero. Revealed using "id_000038,sig_11,src_000015,op_havoc,rep_16" from PR30540, when sh_size was 0, crash happened. Differential revision: https://reviews.llvm.org/D25091 llvm-svn: 285282 --- llvm/include/llvm/Object/ELF.h | 2 ++ .../Object/Inputs/invalid-strtab-zero-size.elf | Bin 0 -> 494 bytes llvm/test/Object/invalid.test | 1 + 3 files changed, 3 insertions(+) create mode 100644 llvm/test/Object/Inputs/invalid-strtab-zero-size.elf diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h index 7aee6b175745..b6d4b804c27d 100644 --- a/llvm/include/llvm/Object/ELF.h +++ b/llvm/include/llvm/Object/ELF.h @@ -428,6 +428,8 @@ ELFFile::getStringTable(const Elf_Shdr *Section) const { if (std::error_code EC = V.getError()) return EC; ArrayRef Data = *V; + if (Data.empty()) + return object_error::parse_failed; if (Data.back() != '\0') return object_error::string_table_non_null_end; return StringRef(Data.begin(), Data.size()); diff --git a/llvm/test/Object/Inputs/invalid-strtab-zero-size.elf b/llvm/test/Object/Inputs/invalid-strtab-zero-size.elf new file mode 100644 index 0000000000000000000000000000000000000000..cb0d0d0d0f9204607051bd2eee7088057d5751d1 GIT binary patch literal 494 zcmb<-^>JfjWMp8_X8;3c20I2t2or@|fW&hEvmF>%8G!l-0CuoEGgK9ldcBg=iV}vj z{Cozz)QtGFqQu-(2EF2vqLRcUZTx_Mji}P1KrYPo6d=1EDqVr949tVNjs+sc4fY*K zj15h#0~((LZUd74z-pjI!PRpESwJ-fOmGnh!vV@iR}VK2>TFq{I&1 | FileCheck %s RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-type.elf 2>&1 | FileCheck %s RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-size.elf 2>&1 | FileCheck %s +RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-zero-size.elf 2>&1 | FileCheck %s CHECK: Invalid data was encountered while parsing the file RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-non-null.elf 2>&1 | FileCheck --check-prefix=NON-NULL %s