fix(libzkp): disable recursion_limit for rust trace deserialization (#923)

fix(ccc): disable_recursion_limit for rust trace deserialization
This commit is contained in:
HAOYUatHZ 2024-07-24 22:57:15 +08:00 committed by GitHub
parent e113804bfc
commit 7b10424e16
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 11 deletions

View file

@ -33,7 +33,7 @@ log = "0.4"
once_cell = "1.19" once_cell = "1.19"
serde = "1.0" serde = "1.0"
serde_derive = "1.0" serde_derive = "1.0"
serde_json = "1.0.66" serde_json = { version = "1.0.66", features = ["unbounded_depth"] }
[profile.test] [profile.test]
opt-level = 3 opt-level = 3

View file

@ -12,6 +12,8 @@ pub mod checker {
use std::panic; use std::panic;
use std::ptr::null; use std::ptr::null;
use std::ffi::CStr; use std::ffi::CStr;
use serde::Deserialize as Deserializea;
use serde_json::Deserializer;
#[derive(Debug, Clone, Deserialize, Serialize)] #[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CommonResult { pub struct CommonResult {
@ -48,9 +50,19 @@ pub mod checker {
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn parse_json_to_rust_trace(trace_json_ptr: *const c_char) -> *mut BlockTrace { pub unsafe extern "C" fn parse_json_to_rust_trace(trace_json_ptr: *const c_char) -> *mut BlockTrace {
let trace_json_cstr = unsafe { CStr::from_ptr(trace_json_ptr) }; let trace_json_cstr = unsafe { CStr::from_ptr(trace_json_ptr) };
let trace = serde_json::from_slice::<BlockTrace>(trace_json_cstr.to_bytes()); let trace_json_bytes = trace_json_cstr.to_bytes();
let mut deserializer = Deserializer::from_slice(trace_json_bytes);
deserializer.disable_recursion_limit();
let trace = BlockTrace::deserialize(&mut deserializer);
match trace { match trace {
Err(_) => return null_mut(), Err(e) => {
log::warn!(
"failed to parse trace in parse_json_to_rust_trace, error: {:?}, trace_json_cstr: {:?}",
e,
trace_json_cstr,
);
return null_mut();
}
Ok(t) => return Box::into_raw(Box::new(t)) Ok(t) => return Box::into_raw(Box::new(t))
} }
} }
@ -226,10 +238,10 @@ pub mod checker {
))? ))?
.get_tx_num() as u64) .get_tx_num() as u64)
}) })
.map_or_else( .map_or_else(
|e| bail!("circuit capacity checker (id: {id}) error in get_tx_num: {e:?}"), |e| bail!("circuit capacity checker (id: {id}) error in get_tx_num: {e:?}"),
|result| result, |result| result,
) )
} }
/// # Safety /// # Safety
@ -260,10 +272,10 @@ pub mod checker {
.set_light_mode(light_mode); .set_light_mode(light_mode);
Ok(()) Ok(())
}) })
.map_or_else( .map_or_else(
|e| bail!("circuit capacity checker (id: {id}) error in set_light_mode: {e:?}"), |e| bail!("circuit capacity checker (id: {id}) error in set_light_mode: {e:?}"),
|result| result, |result| result,
) )
} }
} }