diff --git a/rollup/circuitcapacitychecker/libzkp/Cargo.toml b/rollup/circuitcapacitychecker/libzkp/Cargo.toml index f894b37609..dbc8a30e85 100644 --- a/rollup/circuitcapacitychecker/libzkp/Cargo.toml +++ b/rollup/circuitcapacitychecker/libzkp/Cargo.toml @@ -33,7 +33,7 @@ log = "0.4" once_cell = "1.19" serde = "1.0" serde_derive = "1.0" -serde_json = "1.0.66" +serde_json = { version = "1.0.66", features = ["unbounded_depth"] } [profile.test] opt-level = 3 diff --git a/rollup/circuitcapacitychecker/libzkp/src/lib.rs b/rollup/circuitcapacitychecker/libzkp/src/lib.rs index d8eee0013a..472128a633 100644 --- a/rollup/circuitcapacitychecker/libzkp/src/lib.rs +++ b/rollup/circuitcapacitychecker/libzkp/src/lib.rs @@ -12,6 +12,8 @@ pub mod checker { use std::panic; use std::ptr::null; use std::ffi::CStr; + use serde::Deserialize as Deserializea; + use serde_json::Deserializer; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct CommonResult { @@ -48,9 +50,19 @@ pub mod checker { #[no_mangle] 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 = serde_json::from_slice::(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 { - 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)) } } @@ -226,10 +238,10 @@ pub mod checker { ))? .get_tx_num() as u64) }) - .map_or_else( - |e| bail!("circuit capacity checker (id: {id}) error in get_tx_num: {e:?}"), - |result| result, - ) + .map_or_else( + |e| bail!("circuit capacity checker (id: {id}) error in get_tx_num: {e:?}"), + |result| result, + ) } /// # Safety @@ -260,10 +272,10 @@ pub mod checker { .set_light_mode(light_mode); Ok(()) }) - .map_or_else( - |e| bail!("circuit capacity checker (id: {id}) error in set_light_mode: {e:?}"), - |result| result, - ) + .map_or_else( + |e| bail!("circuit capacity checker (id: {id}) error in set_light_mode: {e:?}"), + |result| result, + ) } }