diff options
author | Etienne Pierre-doray <etiennep@chromium.org> | 2018-09-11 13:40:46 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-07-25 20:36:57 -0700 |
commit | 186ef14d1a5ef23d04684a4548d8c1e7cdc62d15 (patch) | |
tree | a5e9034beba2842b1f177670e91d6e0c4fbb029f /disassembler_elf.cc | |
parent | 725a8734514bb88b5acd976040e6710e26b2e3b5 (diff) | |
download | zucchini-186ef14d1a5ef23d04684a4548d8c1e7cdc62d15.tar.gz |
[Zucchini]: Fix implicit conversions.
Fix compile error with -Wshorten-64-to-32.
Bug: 881008
Change-Id: I52a1bab9cb7b4cb67ea4c275143390d42b192120
Reviewed-on: https://chromium-review.googlesource.com/1216524
Reviewed-by: Will Harris <wfh@chromium.org>
Reviewed-by: Samuel Huang <huangs@chromium.org>
Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org>
Cr-Commit-Position: refs/heads/master@{#590285}
NOKEYCHECK=True
GitOrigin-RevId: f6c70a2cc49b3a1765aa38763532e948c48a65a1
Diffstat (limited to 'disassembler_elf.cc')
-rw-r--r-- | disassembler_elf.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/disassembler_elf.cc b/disassembler_elf.cc index 75690e9..8107987 100644 --- a/disassembler_elf.cc +++ b/disassembler_elf.cc @@ -270,7 +270,8 @@ bool DisassemblerElf<Traits>::ParseHeader() { segment != segments_ + segments_count_; ++segment) { if (!RangeIsBounded(segment->p_offset, segment->p_filesz, kOffsetBound)) return false; - offset_t segment_end = segment->p_offset + segment->p_filesz; + offset_t segment_end = + base::checked_cast<offset_t>(segment->p_offset + segment->p_filesz); offset_bound = std::max(offset_bound, segment_end); } @@ -366,8 +367,10 @@ void DisassemblerElfIntel<Traits>::ParseExecSection( auto& abs32_locations_ = this->abs32_locations_; std::ptrdiff_t from_offset_to_rva = section.sh_addr - section.sh_offset; - rva_t start_rva = section.sh_addr; - rva_t end_rva = start_rva + section.sh_size; + + // Range of values was ensured in ParseHeader(). + rva_t start_rva = base::checked_cast<rva_t>(section.sh_addr); + rva_t end_rva = base::checked_cast<rva_t>(start_rva + section.sh_size); AddressTranslator::RvaToOffsetCache target_rva_checker(this->translator_); @@ -380,7 +383,8 @@ void DisassemblerElfIntel<Traits>::ParseExecSection( finder->Reset(gap.value()); for (auto rel32 = finder->GetNext(); rel32.has_value(); rel32 = finder->GetNext()) { - offset_t rel32_offset = offset_t(rel32->location - image_.begin()); + offset_t rel32_offset = + base::checked_cast<offset_t>(rel32->location - image_.begin()); rva_t rel32_rva = rva_t(rel32_offset + from_offset_to_rva); rva_t target_rva = rel32_rva + 4 + image_.read<uint32_t>(rel32_offset); if (target_rva_checker.IsValid(target_rva) && |