diff --git a/evm/src/witness/operation.rs b/evm/src/witness/operation.rs index 43576ff4..8ed0e551 100644 --- a/evm/src/witness/operation.rs +++ b/evm/src/witness/operation.rs @@ -11,7 +11,9 @@ use crate::cpu::membus::NUM_GP_CHANNELS; use crate::cpu::simple_logic::eq_iszero::generate_pinv_diff; use crate::generation::state::GenerationState; use crate::memory::segments::Segment; +use crate::witness::errors::MemoryError::{ContextTooLarge, SegmentTooLarge, VirtTooLarge}; use crate::witness::errors::ProgramError; +use crate::witness::errors::ProgramError::MemoryError; use crate::witness::memory::{MemoryAddress, MemoryOp}; use crate::witness::util::{ keccak_sponge_log, mem_read_gp_with_log_and_fill, mem_write_gp_log_and_fill, @@ -632,9 +634,15 @@ pub(crate) fn generate_mstore_general( stack_pop_with_log_and_fill::<4, _>(state, &mut row)?; let address = MemoryAddress { - context: context.as_usize(), - segment: segment.as_usize(), - virt: virt.as_usize(), + context: context + .try_into() + .map_err(|_| MemoryError(ContextTooLarge { context }))?, + segment: segment + .try_into() + .map_err(|_| MemoryError(SegmentTooLarge { segment }))?, + virt: virt + .try_into() + .map_err(|_| MemoryError(VirtTooLarge { virt }))?, }; let log_write = mem_write_gp_log_and_fill(4, address, state, &mut row, val);