Skip to content
This repository was archived by the owner on Jan 8, 2025. It is now read-only.

epic: ensure no operation overflowsΒ #904

@enitrat

Description

@enitrat

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions