From cd531a9b99d42e074f2f3004e56054855ff373bf Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Jan 2026 02:59:31 +0400 Subject: [PATCH] fix: validate embedding count in indexer to prevent panic --- src/core/indexer.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/core/indexer.rs b/src/core/indexer.rs index 469c120..e523096 100644 --- a/src/core/indexer.rs +++ b/src/core/indexer.rs @@ -138,6 +138,14 @@ impl Indexer { let all_embeddings = self.engine.embed_batch(&all_chunks)?; + if all_embeddings.len() != all_chunks.len() { + return Err(anyhow::anyhow!( + "Embedding count mismatch: expected {}, got {}", + all_chunks.len(), + all_embeddings.len() + )); + } + pb.finish_and_clear(); println!( " {}Generated {} embeddings", @@ -513,10 +521,27 @@ impl ServerIndexer { for batch in all_chunks.chunks(batch_size) { let batch_refs: Vec<&str> = batch.iter().map(|s| s.as_str()).collect(); let embeddings = self.client.embed_batch(&batch_refs)?; + + if embeddings.len() != batch.len() { + return Err(anyhow::anyhow!( + "Embedding count mismatch in batch: expected {}, got {}", + batch.len(), + embeddings.len() + )); + } + all_embeddings.extend(embeddings); pb.inc(batch.len() as u64); } + if all_embeddings.len() != all_chunks.len() { + return Err(anyhow::anyhow!( + "Total embedding count mismatch: expected {}, got {}", + all_chunks.len(), + all_embeddings.len() + )); + } + pb.finish_and_clear(); println!( " {}Generated {} embeddings",