Skip to content

Commit 05653c7

Browse files
committed
fix: clamp options
1 parent 5d87f63 commit 05653c7

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

crates/vm/src/core/vm.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ impl VM {
804804
// Safely convert U256 to usize
805805
let i: usize = i.try_into().unwrap_or(usize::MAX);
806806

807-
let result = if i + 32 > self.calldata.len() {
807+
let result = if i.saturating_add(32) > self.calldata.len() {
808808
let mut value = [0u8; 32];
809809

810810
if i <= self.calldata.len() {
@@ -881,6 +881,7 @@ impl VM {
881881
let offset: usize = offset.try_into().unwrap_or(usize::MAX);
882882
let size: usize = size.try_into().unwrap_or(usize::MAX);
883883

884+
// clamp values to bytecode length
884885
let value_offset_safe = offset.saturating_add(size).min(self.bytecode.len());
885886
let mut value =
886887
self.bytecode.get(offset..value_offset_safe).unwrap_or(&[]).to_owned();
@@ -932,8 +933,8 @@ impl VM {
932933
let size = self.stack.pop()?.value;
933934

934935
// Safely convert U256 to usize
935-
let dest_offset: usize = dest_offset.try_into().unwrap_or(usize::MAX);
936-
let size: usize = size.try_into().unwrap_or(usize::MAX);
936+
let dest_offset: usize = dest_offset.try_into().unwrap_or(0);
937+
let size: usize = size.try_into().unwrap_or(256);
937938

938939
let mut value = Vec::with_capacity(size);
939940
value.fill(0xff);
@@ -971,8 +972,8 @@ impl VM {
971972
let size = self.stack.pop()?.value;
972973

973974
// Safely convert U256 to usize
974-
let dest_offset: usize = dest_offset.try_into().unwrap_or(usize::MAX);
975-
let size: usize = size.try_into().unwrap_or(usize::MAX);
975+
let dest_offset: usize = dest_offset.try_into().unwrap_or(0);
976+
let size: usize = size.try_into().unwrap_or(256);
976977

977978
let mut value = Vec::with_capacity(size);
978979
value.fill(0xff);

0 commit comments

Comments
 (0)