From 09645ac290c6532b8f6367a3bbc47c870e3881f3 Mon Sep 17 00:00:00 2001 From: ioxde <228087182+ioxde@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:53:16 -0700 Subject: [PATCH] fix(event_parser): add discriminator validation for inner instruction parsing --- src/streaming/event_parser/core/traits.rs | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/streaming/event_parser/core/traits.rs b/src/streaming/event_parser/core/traits.rs index 82ae0fc..5430daf 100755 --- a/src/streaming/event_parser/core/traits.rs +++ b/src/streaming/event_parser/core/traits.rs @@ -1026,6 +1026,18 @@ impl EventParser for GenericEventParser { if !SimdUtils::validate_instruction_data_simd(&inner_instruction.data, 16, 0) { return Vec::new(); } + + // Check if the discriminator matches what we expect for this event type + let discriminator_len = config.inner_instruction_discriminator.len(); + if inner_instruction.data.len() < discriminator_len { + return Vec::new(); + } + + // Validate discriminator matches + if !inner_instruction.data[..discriminator_len].eq(config.inner_instruction_discriminator) { + return Vec::new(); + } + let data = &inner_instruction.data[16..]; let mut events = Vec::new(); if let Some(event) = self.parse_inner_instruction_event( @@ -1062,6 +1074,18 @@ impl EventParser for GenericEventParser { if !SimdUtils::validate_instruction_data_simd(&inner_instruction.data, 16, 0) { return Vec::new(); } + + // Check if the discriminator matches what we expect for this event type + let discriminator_len = config.inner_instruction_discriminator.len(); + if inner_instruction.data.len() < discriminator_len { + return Vec::new(); + } + + // Validate discriminator matches + if !inner_instruction.data[..discriminator_len].eq(config.inner_instruction_discriminator) { + return Vec::new(); + } + let data = &inner_instruction.data[16..]; let mut events = Vec::new(); if let Some(event) = self.parse_inner_instruction_event(