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)));
+ }
}
/* !