fix: clamp inner_index (i64) to i32 range when computing current_inner_idx

Avoid overflow/truncation when inner_index is outside i32 range in both
gRPC and standard instruction parsing paths.

Made-with: Cursor
This commit is contained in:
Wood
2026-03-09 10:31:16 +08:00
parent 7a0a95a2f7
commit 3fe529ea3b
@@ -407,7 +407,8 @@ impl EventParser {
// 超低延迟:顺序执行,避免 thread::scope 的 spawn/join 开销
let mut inner_instruction_event: Option<DexEvent> = None;
if let Some(inner_instructions_ref) = inner_instructions {
let current_inner_idx = inner_index.unwrap_or(-1) as i32;
let raw = inner_index.unwrap_or(-1);
let current_inner_idx = raw.clamp(i32::MIN as i64, i32::MAX as i64) as i32;
for (idx, inner_instruction) in inner_instructions_ref.instructions.iter().enumerate() {
if (idx as i32) <= current_inner_idx {
@@ -566,8 +567,9 @@ impl EventParser {
// 当 inner_index 有值时,只查找索引大于当前 inner_index 的 CPI log
let mut inner_instruction_event: Option<DexEvent> = None;
if let Some(inner_instructions_ref) = inner_instructions {
let current_inner_idx = inner_index.unwrap_or(-1) as i32;
let raw = inner_index.unwrap_or(-1);
let current_inner_idx = raw.clamp(i32::MIN as i64, i32::MAX as i64) as i32;
// 并行执行两个任务: 解析 inner event 和提取 swap_data
let (inner_event_result, swap_data_result) = std::thread::scope(|s| {
let inner_event_handle = s.spawn(|| {