diff options
author | Fangrui Song <i@maskray.me> | 2022-09-14 12:30:34 -0700 |
---|---|---|
committer | Tobias Hieta <tobias@hieta.se> | 2022-09-15 16:04:55 +0200 |
commit | 29d395a1b7a8176abb1d6278f7df98301fbe7744 (patch) | |
tree | fe623a983e36f975dfb02ebdcfa12703708c14a0 /llvm/include | |
parent | 4936d7ce485292b10a7d18a22fa06fcab8f899f6 (diff) | |
download | llvm-29d395a1b7a8176abb1d6278f7df98301fbe7744.zip llvm-29d395a1b7a8176abb1d6278f7df98301fbe7744.tar.gz llvm-29d395a1b7a8176abb1d6278f7df98301fbe7744.tar.bz2 |
[llvm-objdump] Change printSymbolVersionDependency to use ELFFile API
When .gnu.version_r is empty (allowed by readelf but warned by objdump),
llvm-objdump -p may decode the next section as .gnu.version_r and may crash due
to out-of-bounds C string reference. ELFFile<ELFT>::getVersionDependencies
handles 0-entry .gnu.version_r gracefully. Just use it.
Fix https://github.com/llvm/llvm-project/issues/57707
Differential Revision: https://reviews.llvm.org/D133751
(cherry picked from commit 25394c9d10e73b666f4fa1dff2426824894cce58)
Diffstat (limited to 'llvm/include')
-rw-r--r-- | llvm/include/llvm/Object/ELF.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h index 794d29f..5eb4377 100644 --- a/llvm/include/llvm/Object/ELF.h +++ b/llvm/include/llvm/Object/ELF.h @@ -1028,7 +1028,7 @@ ELFFile<ELFT>::getVersionDependencies(const Elf_Shdr &Sec, VN.Offset = VerneedBuf - Start; if (Verneed->vn_file < StrTab.size()) - VN.File = std::string(StrTab.drop_front(Verneed->vn_file)); + VN.File = std::string(StrTab.data() + Verneed->vn_file); else VN.File = ("<corrupt vn_file: " + Twine(Verneed->vn_file) + ">").str(); |