From bc33eb764a8ec351ffbd7d6177410121e002bc8b Mon Sep 17 00:00:00 2001 From: strmfos <155266597+strmfos@users.noreply.github.com> Date: Sat, 21 Feb 2026 09:54:09 +0100 Subject: [PATCH] fix(txpool): prevent underflow in blobstore versioned hash lookup (#22454) Co-authored-by: Matthias Seitz Co-authored-by: Amp --- crates/transaction-pool/src/blobstore/disk.rs | 7 +++++-- crates/transaction-pool/src/blobstore/mem.rs | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/transaction-pool/src/blobstore/disk.rs b/crates/transaction-pool/src/blobstore/disk.rs index 7dec332784..4c130b3529 100644 --- a/crates/transaction-pool/src/blobstore/disk.rs +++ b/crates/transaction-pool/src/blobstore/disk.rs @@ -82,8 +82,11 @@ impl DiskFileBlobStore { for (hash_idx, match_result) in blob_sidecar.match_versioned_hashes(versioned_hashes) { - result[hash_idx] = Some(match_result); - missing_count -= 1; + let slot = &mut result[hash_idx]; + if slot.is_none() { + missing_count -= 1; + } + *slot = Some(match_result); } } diff --git a/crates/transaction-pool/src/blobstore/mem.rs b/crates/transaction-pool/src/blobstore/mem.rs index 75dcfe6673..4d1b1ff77b 100644 --- a/crates/transaction-pool/src/blobstore/mem.rs +++ b/crates/transaction-pool/src/blobstore/mem.rs @@ -30,8 +30,11 @@ impl InMemoryBlobStore { for (hash_idx, match_result) in blob_sidecar.match_versioned_hashes(versioned_hashes) { - result[hash_idx] = Some(match_result); - missing_count -= 1; + let slot = &mut result[hash_idx]; + if slot.is_none() { + missing_count -= 1; + } + *slot = Some(match_result); } }