Skip to content

Commit

Permalink
feat: fix Uint<256> conversion issues by clamping values
Browse files Browse the repository at this point in the history
  • Loading branch information
Jon-Becker committed Jan 30, 2025
1 parent 6049181 commit 5d87f63
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions crates/vm/src/core/vm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -712,7 +712,7 @@ impl VM {
let b = self.stack.pop()?;

// convert a to usize
let usize_a: usize = a.value.try_into()?;
let usize_a: usize = a.value.try_into().unwrap_or(usize::MAX);

let mut result = I256::ZERO;
if !b.value.is_zero() {
Expand All @@ -737,8 +737,8 @@ impl VM {
let size = self.stack.pop()?.value;

// Safely convert U256 to usize
let offset: usize = offset.try_into()?;
let size: usize = size.try_into()?;
let offset: usize = offset.try_into().unwrap_or(usize::MAX);
let size: usize = size.try_into().unwrap_or(usize::MAX);

let data = self.memory.read(offset, size);
let result = keccak256(data);
Expand Down Expand Up @@ -802,7 +802,7 @@ impl VM {
let i = self.stack.pop()?.value;

// Safely convert U256 to usize
let i: usize = i.try_into()?;
let i: usize = i.try_into().unwrap_or(usize::MAX);

let result = if i + 32 > self.calldata.len() {
let mut value = [0u8; 32];
Expand Down Expand Up @@ -932,8 +932,8 @@ impl VM {
let size = self.stack.pop()?.value;

// Safely convert U256 to usize
let dest_offset: usize = dest_offset.try_into()?;
let size: usize = size.try_into()?;
let dest_offset: usize = dest_offset.try_into().unwrap_or(usize::MAX);
let size: usize = size.try_into().unwrap_or(usize::MAX);

let mut value = Vec::with_capacity(size);
value.fill(0xff);
Expand Down Expand Up @@ -971,8 +971,8 @@ impl VM {
let size = self.stack.pop()?.value;

// Safely convert U256 to usize
let dest_offset: usize = dest_offset.try_into()?;
let size: usize = size.try_into()?;
let dest_offset: usize = dest_offset.try_into().unwrap_or(usize::MAX);
let size: usize = size.try_into().unwrap_or(usize::MAX);

let mut value = Vec::with_capacity(size);
value.fill(0xff);
Expand Down Expand Up @@ -1033,7 +1033,7 @@ impl VM {
// MLOAD
0x51 => {
let i = self.stack.pop()?.value;
let i: usize = i.try_into()?;
let i: usize = i.try_into().unwrap_or(usize::MAX);

let result = U256::from_be_slice(self.memory.read(i, 32).as_slice());

Expand All @@ -1050,7 +1050,7 @@ impl VM {
let value = self.stack.pop()?.value;

// Safely convert U256 to usize
let offset: usize = offset.try_into()?;
let offset: usize = offset.try_into().unwrap_or(usize::MAX);

// consume dynamic gas
let gas_cost = self.memory.expansion_cost(offset, 32);
Expand All @@ -1071,7 +1071,7 @@ impl VM {
let value = self.stack.pop()?.value;

// Safely convert U256 to usize
let offset: usize = offset.try_into()?;
let offset: usize = offset.try_into().unwrap_or(usize::MAX);

// consume dynamic gas
let gas_cost = self.memory.expansion_cost(offset, 1);
Expand Down Expand Up @@ -1289,8 +1289,8 @@ impl VM {
self.stack.pop_n(topic_count as usize).iter().map(|x| x.value).collect();

// Safely convert U256 to usize
let offset: usize = offset.try_into()?;
let size: usize = size.try_into()?;
let offset: usize = offset.try_into().unwrap_or(usize::MAX);
let size: usize = size.try_into().unwrap_or(usize::MAX);

let data = self.memory.read(offset, size);

Expand Down Expand Up @@ -1341,8 +1341,8 @@ impl VM {
let size = self.stack.pop()?.value;

// Safely convert U256 to usize
let offset: usize = offset.try_into()?;
let size: usize = size.try_into()?;
let offset: usize = offset.try_into().unwrap_or(usize::MAX);
let size: usize = size.try_into().unwrap_or(usize::MAX);

// consume dynamic gas
let gas_cost = self.memory.expansion_cost(offset, size);
Expand Down Expand Up @@ -1380,8 +1380,8 @@ impl VM {
let size = self.stack.pop()?.value;

// Safely convert U256 to usize
let offset: usize = offset.try_into()?;
let size: usize = size.try_into()?;
let offset: usize = offset.try_into().unwrap_or(usize::MAX);
let size: usize = size.try_into().unwrap_or(usize::MAX);

self.exit(1, self.memory.read(offset, size));
}
Expand Down

0 comments on commit 5d87f63

Please sign in to comment.