SDL: Avoid undefined signed overflow in SDLTest_RandomIntegerInRange

From 1fa217434bbc75439b15ffc8ee3c317edb5f72bf Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 4 Jan 2025 01:07:40 +0100
Subject: [PATCH] Avoid undefined signed overflow in
 SDLTest_RandomIntegerInRange

Partial backport of efba42a67bff4fe5cc3c4083a76d49ecc34fee37
---
 src/test/SDL_test_fuzzer.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/test/SDL_test_fuzzer.c b/src/test/SDL_test_fuzzer.c
index 45468f39703f7..ee58b28193db2 100644
--- a/src/test/SDL_test_fuzzer.c
+++ b/src/test/SDL_test_fuzzer.c
@@ -153,10 +153,10 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 pMin, Sint32 pMax)
 {
     Sint64 min = pMin;
     Sint64 max = pMax;
-    Sint64 temp;
-    Sint64 number;
+    Uint64 range;
 
     if (pMin > pMax) {
+        Sint32 temp;
         temp = min;
         min = max;
         max = temp;
@@ -164,10 +164,13 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 pMin, Sint32 pMax)
         return (Sint32)min;
     }
 
-    number = SDLTest_RandomUint32();
-    /* invocation count increment in preceeding call */
-
-    return (Sint32)((number % ((max + 1) - min)) + min);
+    range = (Sint64)max - (Sint64)min;
+    if (range < SDL_MAX_SINT32) {
+        return min + (Sint32) (SDLTest_RandomUint32() % (range + 1));
+    } else {
+        Uint64 add = SDLTest_RandomUint32() | SDLTest_RandomUint32();
+        return (Sint32) (min + (Sint64) (add % (range + 1)));
+    }
 }
 
 /* !