From 6f2dbccfc88a6c6bcf5342aa919016611acb4bc0 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Sun, 1 Aug 2021 05:19:32 +0000 Subject: [PATCH] Replace all usage of U256::from by const for usize::MAX in core --- core/src/eval/macros.rs | 4 ++-- core/src/eval/misc.rs | 2 +- core/src/lib.rs | 4 ++-- core/src/memory.rs | 6 +++--- core/src/utils.rs | 7 +++++++ 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/src/eval/macros.rs b/core/src/eval/macros.rs index 3fd7a9f6e..9d96a5adb 100644 --- a/core/src/eval/macros.rs +++ b/core/src/eval/macros.rs @@ -115,7 +115,7 @@ macro_rules! op3_u256_fn { macro_rules! as_usize_or_fail { ( $v:expr ) => {{ - if $v > U256::from(usize::MAX) { + if $v > crate::utils::U256_USIZE_MAX { return Control::Exit(ExitFatal::NotSupported.into()); } @@ -123,7 +123,7 @@ macro_rules! as_usize_or_fail { }}; ( $v:expr, $reason:expr ) => {{ - if $v > U256::from(usize::MAX) { + if $v > crate::utils::U256_USIZE_MAX { return Control::Exit($reason.into()); } diff --git a/core/src/eval/misc.rs b/core/src/eval/misc.rs index db9306e48..b5a6e50ff 100644 --- a/core/src/eval/misc.rs +++ b/core/src/eval/misc.rs @@ -32,7 +32,7 @@ pub fn calldataload(state: &mut Machine) -> Control { #[allow(clippy::needless_range_loop)] for i in 0..32 { if let Some(p) = index.checked_add(U256::from(i)) { - if p <= U256::from(usize::MAX) { + if p <= crate::utils::U256_USIZE_MAX { let p = p.as_usize(); if p < state.data.len() { load[i] = state.data[p]; diff --git a/core/src/lib.rs b/core/src/lib.rs index a35ef86f7..300a07900 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -103,14 +103,14 @@ impl Machine { /// Copy and get the return value of the machine, if any. pub fn return_value(&self) -> Vec { - if self.return_range.start > U256::from(usize::MAX) { + if self.return_range.start > crate::utils::U256_USIZE_MAX { let mut ret = Vec::new(); ret.resize( (self.return_range.end - self.return_range.start).as_usize(), 0, ); ret - } else if self.return_range.end > U256::from(usize::MAX) { + } else if self.return_range.end > crate::utils::U256_USIZE_MAX { let mut ret = self.memory.get( self.return_range.start.as_usize(), usize::MAX - self.return_range.start.as_usize(), diff --git a/core/src/memory.rs b/core/src/memory.rs index dad32ac19..670cc409e 100644 --- a/core/src/memory.rs +++ b/core/src/memory.rs @@ -141,20 +141,20 @@ impl Memory { len: U256, data: &[u8], ) -> Result<(), ExitFatal> { - let memory_offset = if memory_offset > U256::from(usize::MAX) { + let memory_offset = if memory_offset > crate::utils::U256_USIZE_MAX { return Err(ExitFatal::NotSupported); } else { memory_offset.as_usize() }; - let ulen = if len > U256::from(usize::MAX) { + let ulen = if len > crate::utils::U256_USIZE_MAX { return Err(ExitFatal::NotSupported); } else { len.as_usize() }; let data = if let Some(end) = data_offset.checked_add(len) { - if end > U256::from(usize::MAX) { + if end > crate::utils::U256_USIZE_MAX { &[] } else { let data_offset = data_offset.as_usize(); diff --git a/core/src/utils.rs b/core/src/utils.rs index c78dd49e6..b3f639e8e 100644 --- a/core/src/utils.rs +++ b/core/src/utils.rs @@ -2,6 +2,13 @@ use core::cmp::Ordering; use core::ops::{Div, Rem}; use primitive_types::U256; +pub const U256_USIZE_MAX: U256 = { + // TODO: assert!(core::mem::size_of::() <= core::mem::size_of::()); + let mut ret = [0; 4]; + ret[0] = usize::MAX as u64; + U256(ret) +}; + #[derive(Copy, Clone, Eq, PartialEq, Debug)] pub enum Sign { Plus,