diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index d36e13a0c92bc6f5238a591e99c600ed648bffdf..713ba6c25416297f2ceaf1910d40668b3c4869f5 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -186,12 +186,18 @@ pub unsafe extern "C" fn bsearch( #[no_mangle] pub unsafe extern "C" fn calloc(nelem: size_t, elsize: size_t) -> *mut c_void { - let size = nelem * elsize; - let ptr = malloc(size); - if !ptr.is_null() { - intrinsics::write_bytes(ptr as *mut u8, 0, size); + //Handle possible integer overflow in size calculation + let size_result = nelem.checked_mul(elsize); + match size_result { + Some(size) => { + let ptr = malloc(size); + if !ptr.is_null() { + intrinsics::write_bytes(ptr as *mut u8, 0, size); + } + ptr + }, + None => core::ptr::null_mut() } - ptr } #[repr(C)]