Skip to content

Commit

Permalink
Free Rust CString by from_raw.
Browse files Browse the repository at this point in the history
  • Loading branch information
silathdiir committed Oct 22, 2023
1 parent c2ab4bf commit 33ed9d4
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
6 changes: 6 additions & 0 deletions common/libzkp/impl/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ use std::{
pub(crate) static OUTPUT_DIR: Lazy<Option<String>> =
Lazy::new(|| env::var("PROVER_OUTPUT_DIR").ok());

/// # Safety
#[no_mangle]
pub unsafe extern "C" fn free_c_chars(ptr: *mut c_char) {
let _ = CString::from_raw(ptr);
}

pub(crate) fn c_char_to_str(c: *const c_char) -> &'static str {
let cstr = unsafe { CStr::from_ptr(c) };
cstr.to_str().unwrap()
Expand Down
1 change: 1 addition & 0 deletions common/libzkp/interface/libzkp.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ char* gen_chunk_proof(char* block_traces);
char verify_chunk_proof(char* proof);

char* block_traces_to_chunk_info(char* block_traces);
void free_c_chars(char* ptr);
10 changes: 5 additions & 5 deletions prover/core/prover.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func NewProverCore(cfg *config.ProverCoreConfig) (*ProverCore, error) {

var vk string
var rawVK *C.char
defer C.free(unsafe.Pointer(rawVK))
defer C.free_c_chars(rawVK)
if cfg.ProofType == message.ProofTypeBatch {
C.init_batch_prover(paramsPathStr, assetsPathStr)
rawVK = C.get_batch_vk()
Expand Down Expand Up @@ -162,7 +162,7 @@ func (p *ProverCore) checkChunkProofs(chunkProofsByt []byte) (bool, error) {

log.Info("Start to check chunk proofs ...")
cResult := C.check_chunk_proofs(chunkProofsStr)
defer C.free(unsafe.Pointer(cResult))
defer C.free_c_chars(cResult)
log.Info("Finish checking chunk proofs!")

var result CheckChunkProofsResponse
Expand All @@ -189,7 +189,7 @@ func (p *ProverCore) proveBatch(chunkInfosByt []byte, chunkProofsByt []byte) ([]

log.Info("Start to create batch proof ...")
bResult := C.gen_batch_proof(chunkInfosStr, chunkProofsStr)
defer C.free(unsafe.Pointer(bResult))
defer C.free_c_chars(bResult)
log.Info("Finish creating batch proof!")

var result ProofResult
Expand All @@ -211,7 +211,7 @@ func (p *ProverCore) proveChunk(tracesByt []byte) ([]byte, error) {

log.Info("Start to create chunk proof ...")
cProof := C.gen_chunk_proof(tracesStr)
defer C.free(unsafe.Pointer(cProof))
defer C.free_c_chars(cProof)
log.Info("Finish creating chunk proof!")

var result ProofResult
Expand Down Expand Up @@ -243,7 +243,7 @@ func (p *ProverCore) mayDumpProof(id string, proofByt []byte) error {

func (p *ProverCore) tracesToChunkInfo(tracesByt []byte) []byte {
tracesStr := C.CString(string(tracesByt))
defer C.free(unsafe.Pointer(tracesStr))
defer C.free_c_chars(tracesStr)

cChunkInfo := C.block_traces_to_chunk_info(tracesStr)
defer C.free(unsafe.Pointer(cChunkInfo))
Expand Down

0 comments on commit 33ed9d4

Please sign in to comment.