From 6f2e55c2fbc8c28020f94d442fb39ec6d1614836 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 8 Aug 2026 16:43:16 +0500 Subject: [PATCH] engine: client: sound: harden S_AdjustLoopedSamplePosition against invalid loopstart also --- engine/client/sound/s_main.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/engine/client/sound/s_main.c b/engine/client/sound/s_main.c index 05f227a4..22d7a06a 100644 --- a/engine/client/sound/s_main.c +++ b/engine/client/sound/s_main.c @@ -68,13 +68,14 @@ static int S_AdjustLoopedSamplePosition( const wavdata_t *source, int current_sa // check if looping is enabled and we've exceeeded the sample boundary if( enable_looping && FBitSet( source->flags, SOUND_LOOPED ) && current_sample >= source->samples ) { - // adjust position relative to loop start - current_sample -= source->loop_start; + int loop_start = Q_min( source->loop_start, source->samples ); + int loop_range = source->samples - loop_start; // apply modulo to wrap within loop bounds - int loop_range = source->samples - source->loop_start; if( loop_range > 0 ) - current_sample = source->loop_start + ( current_sample % loop_range ); + current_sample = loop_start + (( current_sample - loop_start ) % loop_range ); + else + current_sample = source->samples; } return current_sample;