From cbadb59a66d58cb4b0f0e7923b283b9789aed2e4 Mon Sep 17 00:00:00 2001 From: Quantum Explorer Date: Fri, 6 Mar 2026 17:49:11 +0700 Subject: [PATCH] fix(drive): guard against max_elements=0 in encrypted notes verification When max_elements=0, the end_index calculation `start_index + limit - 1` would underflow (u64 subtraction). Add an early return error. Co-Authored-By: Claude Opus 4.6 --- .../shielded/verify_shielded_encrypted_notes/v0/mod.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/rs-drive/src/verify/shielded/verify_shielded_encrypted_notes/v0/mod.rs b/packages/rs-drive/src/verify/shielded/verify_shielded_encrypted_notes/v0/mod.rs index 39cb6eded49..83a627314aa 100644 --- a/packages/rs-drive/src/verify/shielded/verify_shielded_encrypted_notes/v0/mod.rs +++ b/packages/rs-drive/src/verify/shielded/verify_shielded_encrypted_notes/v0/mod.rs @@ -15,9 +15,15 @@ impl Drive { verify_subset_of_proof: bool, platform_version: &PlatformVersion, ) -> Result<(RootHash, Vec<(Vec, Vec, Vec)>), Error> { + if max_elements == 0 { + return Err(Error::Drive(DriveError::CorruptedElementType( + "max_elements must be greater than zero", + ))); + } + // start_index must be chunk-aligned (multiple of max_elements) let chunk_size = max_elements as u64; - if chunk_size > 0 && start_index % chunk_size != 0 { + if start_index % chunk_size != 0 { return Err(Error::Drive(DriveError::CorruptedElementType( "start_index is not chunk-aligned; must be a multiple of max_elements", )));