aboutsummaryrefslogtreecommitdiff
path: root/disassembler_elf.cc
diff options
context:
space:
mode:
authorEtienne Pierre-doray <etiennep@chromium.org>2018-09-11 13:40:46 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 20:36:57 -0700
commit186ef14d1a5ef23d04684a4548d8c1e7cdc62d15 (patch)
treea5e9034beba2842b1f177670e91d6e0c4fbb029f /disassembler_elf.cc
parent725a8734514bb88b5acd976040e6710e26b2e3b5 (diff)
downloadzucchini-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.cc12
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) &&