diff --git a/src/vm/errors/memory_errors.rs b/src/vm/errors/memory_errors.rs index 80899ab84d..9cbaeb1c03 100644 --- a/src/vm/errors/memory_errors.rs +++ b/src/vm/errors/memory_errors.rs @@ -64,4 +64,6 @@ pub enum MemoryError { CantGetMutAccessedOffset, #[error("Failed to convert String: {0} to FieldElement")] FailedStringToFieldElementConversion(String), + #[error("Vector capacity exceeded")] + VecCapacityExceeded, } diff --git a/src/vm/vm_memory/memory.rs b/src/vm/vm_memory/memory.rs index ea721ce928..a72e5c35cc 100644 --- a/src/vm/vm_memory/memory.rs +++ b/src/vm/vm_memory/memory.rs @@ -7,7 +7,7 @@ use felt::Felt; use std::{ borrow::Cow, collections::{HashMap, HashSet}, - mem::swap, + mem::{self, swap}, }; pub struct ValidationRule( @@ -63,7 +63,13 @@ impl Memory { //Check if the element is inserted next to the last one on the segment //Forgoing this check would allow data to be inserted in a different index + if segment.len() <= value_offset { + if (segment.capacity() + value_offset + 1) * mem::size_of::() + > isize::MAX as usize + { + return Err(MemoryError::VecCapacityExceeded); + } segment.resize(value_offset + 1, None); } // At this point there's *something* in there