From 61099f8784f32e2da13dd02a0edb0b3997f691fe Mon Sep 17 00:00:00 2001 From: josephsellers <6892567+josephsellers@users.noreply.github.com> Date: Thu, 4 Dec 2025 20:38:50 +0000 Subject: [PATCH] vad : fix buffer overflow in sample reduction loop The buffer size calculation loop (line ~6661) uses `n_samples - 1` as the upper bound for segment_end_samples, but the copy loop (line 6696) uses `n_samples`. This inconsistency allows the copy loop to compute segment_length values up to 1 sample larger per segment than what was allocated, causing heap corruption. Symptom: `malloc(): corrupted top size` or `malloc(): invalid size (unsorted)` crashes after VAD completes sample reduction. Fix: Use consistent bounds (`n_samples - 1`) in both loops. Fixes #3403 --- src/whisper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/whisper.cpp b/src/whisper.cpp index f6793cb237b..b6581f2b409 100644 --- a/src/whisper.cpp +++ b/src/whisper.cpp @@ -6693,7 +6693,7 @@ static bool whisper_vad( } segment_start_samples = std::min(segment_start_samples, n_samples - 1); - segment_end_samples = std::min(segment_end_samples, n_samples); + segment_end_samples = std::min(segment_end_samples, n_samples - 1); int segment_length = segment_end_samples - segment_start_samples; if (segment_length > 0) { whisper_state::vad_segment_info segment;