diff --git a/CHANGELOG.md b/CHANGELOG.md index b0e1be6218..a0f217250f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ #### Upcoming Changes +* fix: Remove validation of CairoPie memory values [#1783](https://github.com/lambdaclass/cairo-vm/pull/1783) + * fix: Handle `GasBuiltin` in cairo1-run crate [#1789](https://github.com/lambdaclass/cairo-vm/pull/1789) * Load `initial_gas` into vm instead of creating it via instructions. * Fix bug affecting programs with input arguments and gas builtin. diff --git a/cairo_programs/value_beyond_segment.cairo b/cairo_programs/value_beyond_segment.cairo new file mode 100644 index 0000000000..64a9eb5683 --- /dev/null +++ b/cairo_programs/value_beyond_segment.cairo @@ -0,0 +1,12 @@ +from starkware.cairo.common.segments import relocate_segment +from starkware.cairo.common.alloc import alloc + +func main() { + // Create a new segment + let (segment: felt*) = alloc(); + + // Insert a value into the segment beyond the end of the segment. + assert segment[0] = cast(segment, felt) + 100; + + return (); +} diff --git a/vm/src/cairo_run.rs b/vm/src/cairo_run.rs index b940295354..b7d5d005e3 100644 --- a/vm/src/cairo_run.rs +++ b/vm/src/cairo_run.rs @@ -470,6 +470,7 @@ mod tests { #[case(include_bytes!("../../cairo_programs/relocate_segments.json"))] #[case(include_bytes!("../../cairo_programs/ec_op.json"))] #[case(include_bytes!("../../cairo_programs/bitwise_output.json"))] + #[case(include_bytes!("../../cairo_programs/value_beyond_segment.json"))] fn get_and_run_cairo_pie(#[case] program_content: &[u8]) { let cairo_run_config = CairoRunConfig { layout: LayoutName::starknet_with_keccak, diff --git a/vm/src/tests/cairo_run_test.rs b/vm/src/tests/cairo_run_test.rs index ed6de4384e..ce42ca31dd 100644 --- a/vm/src/tests/cairo_run_test.rs +++ b/vm/src/tests/cairo_run_test.rs @@ -1015,6 +1015,13 @@ fn fibonacci_proof_mode_disable_trace_padding() { assert!(runner.get_memory_holes().unwrap().is_zero()); } +#[test] +#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] +fn value_beyond_segment() { + let program_data = include_bytes!("../../../cairo_programs/value_beyond_segment.json"); + run_program_simple(program_data.as_slice()); +} + #[test] fn cairo_run_overflowing_dict() { let program_data = diff --git a/vm/src/vm/runners/cairo_pie.rs b/vm/src/vm/runners/cairo_pie.rs index 54a1595206..371b6de82f 100644 --- a/vm/src/vm/runners/cairo_pie.rs +++ b/vm/src/vm/runners/cairo_pie.rs @@ -264,11 +264,8 @@ impl CairoPie { Ok(()) }; - for ((si, so), value) in self.memory.0.iter() { + for ((si, so), _) in self.memory.0.iter() { validate_addr((*si as isize, *so).into())?; - if let MaybeRelocatable::RelocatableValue(val) = value { - validate_addr(*val)?; - } } Ok(()) } @@ -847,6 +844,7 @@ mod test { #[case(include_bytes!("../../../../cairo_programs/relocate_segments.json"), "relocate")] #[case(include_bytes!("../../../../cairo_programs/ec_op.json"), "ec_op")] #[case(include_bytes!("../../../../cairo_programs/bitwise_output.json"), "bitwise")] + #[case(include_bytes!("../../../../cairo_programs/value_beyond_segment.json"), "relocate_beyond")] fn read_write_pie_zip(#[case] program_content: &[u8], #[case] identifier: &str) { use crate::{ cairo_run::CairoRunConfig,