From 1fa217434bbc75439b15ffc8ee3c317edb5f72bf Mon Sep 17 00:00:00 2001 From: Anonymous Maarten 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 45468f3970..ee58b28193 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))); + } } /* !