Avoid undefined signed overflow in SDLTest_RandomIntegerInRange

Partial backport of efba42a67b
This commit is contained in:
Anonymous Maarten
2025-01-04 01:07:40 +01:00
parent 9dc8c82082
commit 1fa217434b

View File

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