This repository was archived by the owner on Jan 8, 2025. It is now read-only.
generated from keep-starknet-strange/alexandria
-
Notifications
You must be signed in to change notification settings - Fork 82
epic: ensure no operation overflowsΒ #904
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Ensure that no operation overflows.
example, in returndatacopy:
fn exec_returndatacopy(ref self: VM) -> Result<(), EVMError> {
let dest_offset = self.stack.pop_usize()?;
let offset = self.stack.pop_usize()?;
let size = self.stack.pop_usize()?;
let return_data: Span<u8> = self.return_data();
let (last_returndata_index, overflow) = offset.overflowing_add(size);
if overflow {
return Result::Err(EVMError::ReturnDataOutOfBounds);
}
ensure(!(last_returndata_index > return_data.len()), EVMError::ReturnDataOutOfBounds)?;
instead of doing size + offset to get the last returndata index, we check for overflows. Otherwise, we would get a CairoVM error that would fail the entire transaction
we can use something like
offset.overflowing_add(size).ok_or(EVMError::ReturnDataOutOfBounds)?;
to manage this efficiently
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request