SDL: Clamp results of GetResampler(AvailableOutput|NeededInput)Frames

From 96e47f16576bdd794c349b808fe771275d3d6b5c Mon Sep 17 00:00:00 2001
From: Brick <[EMAIL REDACTED]>
Date: Sun, 20 Aug 2023 23:03:32 +0100
Subject: [PATCH] Clamp results of
 GetResampler(AvailableOutput|NeededInput)Frames

---
 src/audio/SDL_audiocvt.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c
index 13e129dcdcf2..d5e5a64c835f 100644
--- a/src/audio/SDL_audiocvt.c
+++ b/src/audio/SDL_audiocvt.c
@@ -45,16 +45,16 @@ static Sint64 GetResampleRate(const int src_rate, const int dst_rate)
 
 static size_t GetResamplerAvailableOutputFrames(const size_t input_frames, const Sint64 resample_rate, const Sint64 resample_offset)
 {
-    SDL_assert(resample_offset < resample_rate);
+    const Sint64 frames = ((((Sint64)input_frames << 32) - resample_offset - 1) / resample_rate) + 1;
 
-    return (size_t)((((Sint64)input_frames << 32) - resample_offset + resample_rate - 1) / resample_rate);
+    return (size_t) SDL_max(frames, 0);
 }
 
 static int GetResamplerNeededInputFrames(const int output_frames, const Sint64 resample_rate, const Sint64 resample_offset)
 {
-    const Sint64 lastpos = ((output_frames - 1) * resample_rate) + resample_offset;
+    const Sint32 frames = (Sint32)((((output_frames - 1) * resample_rate) + resample_offset) >> 32) + 1;
 
-    return (int)(Sint32)(lastpos >> 32) + 1;
+    return (int) SDL_max(frames, 0);
 }
 
 static int GetResamplerPaddingFrames(const Sint64 resample_rate)