From eac6a3080d38cfd4eb7204ecd327df213958e51a Mon Sep 17 00:00:00 2001 From: Ben Woosley Date: Thu, 27 Feb 2020 17:35:31 -0800 Subject: refactor: Rework asmap Interpret to avoid ptrdiff_t --- src/util/asmap.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/util/asmap.cpp') diff --git a/src/util/asmap.cpp b/src/util/asmap.cpp index b4090482b9..bd77d74218 100644 --- a/src/util/asmap.cpp +++ b/src/util/asmap.cpp @@ -93,7 +93,8 @@ uint32_t Interpret(const std::vector &asmap, const std::vector &ip) jump = DecodeJump(pos, endpos); if (jump == INVALID) break; // Jump offset straddles EOF if (bits == 0) break; // No input bits left - if (jump >= endpos - pos) break; // Jumping past EOF + if (pos + jump < pos) break; // overflow + if (pos + jump >= endpos) break; // Jumping past EOF if (ip[ip.size() - bits]) { pos += jump; } @@ -155,7 +156,8 @@ bool SanityCheckASMap(const std::vector& asmap, int bits) } else if (opcode == Instruction::JUMP) { uint32_t jump = DecodeJump(pos, endpos); if (jump == INVALID) return false; // Jump offset straddles EOF - if (jump > endpos - pos) return false; // Jump out of range + if (pos + jump < pos) return false; // overflow + if (pos + jump > endpos) return false; // Jump out of range if (bits == 0) return false; // Consuming bits past the end of the input --bits; uint32_t jump_offset = pos - begin + jump; -- cgit v1.2.3