[llvm] r368139 - [ELF.h] - Check the case when e_shstrndx=SHN_XINDEX, but the corresponding sh_link is broken.
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 7 02:29:43 PDT 2019
Author: grimar
Date: Wed Aug 7 02:29:42 2019
New Revision: 368139
URL: http://llvm.org/viewvc/llvm-project?rev=368139&view=rev
Log:
[ELF.h] - Check the case when e_shstrndx=SHN_XINDEX, but the corresponding sh_link is broken.
When e_shstrndx is equal to SHN_XINDEX,
the index of the section string table section should
be taken from the sh_link field of the section
header at index 0.
If sh_link is broken, e.g. contains an index that is
larger than number of sections, then error is reported.
This error message was untested before.
Differential revision: https://reviews.llvm.org/D65391
Modified:
llvm/trunk/include/llvm/Object/ELF.h
llvm/trunk/test/Object/invalid.test
Modified: llvm/trunk/include/llvm/Object/ELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELF.h?rev=368139&r1=368138&r2=368139&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELF.h (original)
+++ llvm/trunk/include/llvm/Object/ELF.h Wed Aug 7 02:29:42 2019
@@ -465,7 +465,6 @@ ELFFile<ELFT>::getSectionStringTable(Elf
if (!Index) // no section string table.
return "";
- // TODO: Test a case when the sh_link of the section with index 0 is broken.
if (Index >= Sections.size())
return createError("section header string table index " + Twine(Index) +
" does not exist");
Modified: llvm/trunk/test/Object/invalid.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/invalid.test?rev=368139&r1=368138&r2=368139&view=diff
==============================================================================
--- llvm/trunk/test/Object/invalid.test (original)
+++ llvm/trunk/test/Object/invalid.test Wed Aug 7 02:29:42 2019
@@ -652,3 +652,23 @@ Sections:
DynamicSymbols:
- Name: foo
Binding: STB_GLOBAL
+
+## Check the case when e_shstrndx == SHN_XINDEX, but null section's sh_link contains
+## the index of a section header string table that is larger than the number of the sections.
+
+# RUN: yaml2obj --docnum=31 %s -o %t31
+# RUN: not llvm-objcopy %t31 2>&1 | FileCheck %s -DFILE=%t31 --check-prefix=INVALID-SHSTRTAB-INDEX
+
+# INVALID-SHSTRTAB-INDEX: error: section header string table index 255 does not exist
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+## SHN_XINDEX == 0xffff.
+ SHStrNdx: 0xffff
+Sections:
+ - Type: SHT_NULL
+ Link: 0xff
More information about the llvm-commits
mailing list