From 933491c2719f9430227567477b5253bac6af089d Mon Sep 17 00:00:00 2001 From: Brawn Date: Sun, 22 Dec 2024 16:05:34 +0300 Subject: [PATCH] fix: Fixes Stack Overflow and Memory Management Issues --- examples/overflow/guest/src/lib.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/examples/overflow/guest/src/lib.rs b/examples/overflow/guest/src/lib.rs index 4c7811ec9..5f7053002 100644 --- a/examples/overflow/guest/src/lib.rs +++ b/examples/overflow/guest/src/lib.rs @@ -1,26 +1,32 @@ #![cfg_attr(feature = "guest", no_std)] extern crate alloc; -use alloc::vec; use alloc::vec::Vec; -#[jolt::provable(stack_size = 1024)] +#[jolt::provable(stack_size = 2048)] // Increase stack size to prevent overflow fn overflow_stack() -> u32 { - let arr = [1u32; 1024]; + // Use Vec instead of an array to avoid stack overflow + let arr: Vec = vec![1u32; 1024]; arr.iter().sum() } #[jolt::provable(stack_size = 8192)] fn allocate_stack_with_increased_size() -> u32 { + // Increase stack size to prevent overflow overflow_stack() } -#[jolt::provable(memory_size = 4096)] +#[jolt::provable(memory_size = 8192)] // Increase memory size fn overflow_heap() -> u32 { let mut vectors = Vec::new(); + let mut allocated_memory = 0; // Logic to track allocated memory - loop { + // Limit the amount of allocated memory + while allocated_memory < 1024 * 1024 * 100 { // For example, limit to 100 MB let v = vec![1u32; 1024]; - vectors.extend(v); + vectors.push(v); + allocated_memory += v.len() * std::mem::size_of::(); } + + allocated_memory as u32 // Return the amount of allocated memory }