From d88894c36590d3b71896f06334f8e9ef39a25fa4 Mon Sep 17 00:00:00 2001 From: Brendan Hansknecht Date: Mon, 13 Mar 2023 14:08:11 -0700 Subject: [PATCH] avoid zero sized allocation in false --- .../cli/false-interpreter/platform/src/lib.rs | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/examples/cli/false-interpreter/platform/src/lib.rs b/examples/cli/false-interpreter/platform/src/lib.rs index 897eaea4d2..05f840634b 100644 --- a/examples/cli/false-interpreter/platform/src/lib.rs +++ b/examples/cli/false-interpreter/platform/src/lib.rs @@ -134,18 +134,26 @@ pub extern "C" fn rust_main() -> i32 { unsafe fn call_the_closure(closure_data_ptr: *const u8) -> i64 { let size = size_Fx_result() as usize; - let layout = Layout::array::(size).unwrap(); - let buffer = std::alloc::alloc(layout) as *mut u8; + if size == 0 { + call_Fx( + // This flags pointer will never get dereferenced + MaybeUninit::uninit().as_ptr(), + closure_data_ptr as *const u8, + std::ptr::null_mut(), + ); + } else { + let layout = Layout::array::(size).unwrap(); + let buffer = std::alloc::alloc(layout) as *mut u8; - call_Fx( - // This flags pointer will never get dereferenced - MaybeUninit::uninit().as_ptr(), - closure_data_ptr as *const u8, - buffer as *mut u8, - ); - - std::alloc::dealloc(buffer, layout); + call_Fx( + // This flags pointer will never get dereferenced + MaybeUninit::uninit().as_ptr(), + closure_data_ptr as *const u8, + buffer as *mut u8, + ); + std::alloc::dealloc(buffer, layout); + } 0 }