mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
fix(libzkp): disable recursion_limit for rust trace deserialization (#923)
fix(ccc): disable_recursion_limit for rust trace deserialization
This commit is contained in:
parent
e113804bfc
commit
7b10424e16
2 changed files with 23 additions and 11 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue