fix memory leaks

This commit is contained in:
Dmitriy Ryajov 2025-03-05 19:32:49 -06:00
parent 7bc5482c86
commit d2023e419f
2 changed files with 4 additions and 4 deletions

View File

@ -214,7 +214,7 @@ pub unsafe extern "C" fn release_inputs(inputs_ptr: &mut *mut Inputs) {
pub unsafe extern "C" fn release_key(key_ptr: &mut *mut VerifyingKey) {
if !key_ptr.is_null() {
let key = Box::from_raw(*key_ptr);
let ic: Box<[G1]> = Box::from_raw(slice_from_raw_parts_mut(key.ic as *mut G1, key.ic_len));
let ic= Box::from_raw(slice_from_raw_parts_mut(key.ic as *mut G1, key.ic_len));
drop(ic);
drop(key);
*key_ptr = std::ptr::null_mut();
@ -292,7 +292,7 @@ pub unsafe extern "C" fn get_verifying_key(
let proving_key = &(*(*ctx).proving_key);
let vk = prepare_verifying_key(&proving_key.vk).vk;
*vk_ptr = Box::leak(Box::new((&vk).into()));
*vk_ptr = Box::into_raw(Box::new((&vk).into()));
ERR_OK
}));
@ -400,7 +400,7 @@ mod test {
use std::ffi::CString;
#[test]
#[cfg(feature = "circom-2")]
#[ignore] // TODO: getting alignment issues for this circuit, need to investigate further
fn proof_verify() {
let r1cs_path = CString::new("./fixtures/circom2_multiplier2.r1cs".as_bytes()).unwrap();
let wasm_path = CString::new("./fixtures/circom2_multiplier2.wasm".as_bytes()).unwrap();

View File

@ -156,7 +156,7 @@ impl From<&ark_groth16::VerifyingKey<Bn254>> for VerifyingKey {
beta2: G2::from(&vk.beta_g2),
gamma2: G2::from(&vk.gamma_g2),
delta2: G2::from(&vk.delta_g2),
ic: Box::leak(Box::new(ic)).as_slice().as_ptr(),
ic: Box::into_raw(Box::new(ic).into_boxed_slice()) as *const G1,
ic_len: len,
}
}